Wie ändere ich die Maven-Protokollierungsstufe, um nur Warnungen und Fehler anzuzeigen?


142

Ich möchte verhindern, dass Maven INFO-Meldungen anzeigt. Ich möchte nur WARNUNGEN und FEHLER (falls vorhanden) sehen.

Wie kann ich dies erreichen, vorzugsweise durch Ändern der Befehlszeile, die maven aufruft?


Relevantes Thema: stackoverflow.com/questions/71069/… . -B, --batch-modeoder -qwird mvnweniger ausführlich machen.
Stanislav

Antworten:


108

Beantwortung Ihrer Frage

Ich habe eine kleine Untersuchung durchgeführt, weil ich auch an der Lösung interessiert bin.

Ausführlichkeitsoptionen für die Maven-Befehlszeile

Laut http://books.sonatype.com/mvnref-book/reference/running-sect-options.html#running-sect-verbose-option

  • -e für Fehler
  • -X zum Debuggen
  • -q nur für Fehler

Konfigurationsdatei für die Maven-Protokollierung

Derzeit verwendet Maven 3.1.x SLF4J, um sich bei System.out anzumelden. Sie können die Protokollierungseinstellungen in der Datei ändern:

${MAVEN_HOME}/conf/logging/simplelogger.properties

Laut der Seite: http://maven.apache.org/maven-logging.html

Befehlszeilen-Setup

Ich denke, Sie sollten in der Lage sein, die Standardprotokollstufe des einfachen Loggers über einen Befehlszeilenparameter wie folgt einzurichten:

$ mvn clean package -Dorg.slf4j.simpleLogger.defaultLogLevel=debug

Aber ich konnte es nicht zum Laufen bringen . Ich denke, das einzige Problem dabei ist, dass Maven die Standardstufe aus der Konfigurationsdatei im Klassenpfad übernimmt. Ich habe auch einige andere Einstellungen über System.properties ausprobiert, aber alle waren nicht erfolgreich.

Blinddarm

Die Quelle von slf4j auf github finden Sie hier: slf4j github

Die Quelle des Simpleloggers hier: slf4j / jcl-over-slf4j / src / main / java / org / apache / commons / logging / impl / SimpleLog.java

Der Plexuslader lädt die simplelogger.properties.


2
Hast du die simplelogger.propertiesÄnderung zum Laufen gebracht? Wenn ich die org.slf4j.simpleLogger.warnLevelStringEinstellungen mvn compileentsprechend ändere, wird die Einstellung anscheinend ignoriert org.slf4j.simpleLogger.defaultLogLevel. Es protokolliert auch auf der Info-Ebene, selbst wenn ich das auf Warnung oder Fehler eingestellt habe.
Alden

1
@Alden, ich bekomme das gleiche Verhalten. es wird einfach ignoriert.
Jax

18
Für mich stellte sich heraus, dass das Hinzufügen von "-Dorg.slf4j.simpleLogger.defaultLogLevel = info" zum Build-Befehl keine Auswirkungen hat. Wenn ich dies vor dem Build in MAVEN_OPTS wie folgt definiere: exportiere "MAVEN_OPTS = $ MAVEN_OPTS -Dorg.slf4j.simpleLogger.defaultLogLevel = debug", dann funktioniert es perfekt, ohne die Datei $ {MAVEN_HOME} /conf/logging/simplelogger.properties zu ändern .
Gábor Lipták

1
Alden, Gábor Lipták: und für mich funktioniert keine der beiden Methoden. :( Ich benutze Maven 3.2.5.
Greg Dubicki

1
Wenn Windows in der Bat-Datei set MAVEN_OPTS =% MAVEN_OPTS% -Dorg.slf4j.simpleLogger.defaultLogLevel = warn
feilong

45

Linux:

mvn validate clean install | egrep -v "(^\[INFO\])"

oder

mvn validate clean install | egrep -v "(^\[INFO\]|^\[DEBUG\])"

Windows:

mvn validate clean install | findstr /V /R "^\[INFO\] ^\[DEBUG\]"

5
aber wenn es darum geht, die redundante E / A während mvn zu reduzieren ... dann ist es nicht wirklich der Trick
HoaPhan

Wie können wir auf einem Windows-Computer dasselbe erreichen, wenn egrep darauf nicht funktioniert?
Hemanto

so etwas wiemvn validate clean install | findstr /V /B "\[INFO\]" | findstr /V /B "\[WARN\]"
Tom H

Es sieht so aus, als ob es findstrRegex und andere Optionen unterstützt, die es prägnanter machen könnten - ss64.com/nt/findstr.html
Tom H

mvn validate clean install | findstr /V /R "^\[INFO\] ^\[WARN\]"
Tom H

32

Dies können Sie beispielsweise mit MAVEN_OPTS erreichen
MAVEN_OPTS=-Dorg.slf4j.simpleLogger.defaultLogLevel=warn mvn clean

Anstatt die Systemeigenschaft direkt in die Befehlszeile einzufügen. (Zumindest für Maven 3.3.1.)

Erwägen Sie die Verwendung ~/.mavenrcfür die Einstellung, MAVEN_OPTSwenn Sie möchten, dass die Protokollierung für Ihre Anmeldung über alle Maven-Aufrufe hinweg geändert wird.


2
Dies scheint zu funktionieren, da ich die Warn- und Infomeldung deaktivieren konnte, indem ich den Pegel auf Fehler setzte, aber leider wurde auch die reguläre Ausgabe ausgeschaltet. Ich habe tatsächlich versucht, einige Warnungen zu deaktivieren, während das help:evaluateZiel ausgeführt wurde, um den Wert von zu drucken, project.versionund diese Ausgabe (obwohl sie nicht durchzukommen scheint slf4j) wurde ebenfalls deaktiviert .
Haridsv

Die einzige Antwort, die funktioniert, ohne die Installation von Maven dauerhaft zu beeinträchtigen. Ein weiterer Grund, warum Maven ein Dinosaurier im Build-System ist - es unterstützt einfach nicht die Anforderungen des gesunden Menschenverstandes.
Abhijit Sarkar

16

Wenn Sie Logback verwenden, legen Sie diese logback-test.xmlDatei einfach in einem src/test/resourcesVerzeichnis ab:

<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
</appender>
<root level="INFO">
    <appender-ref ref="STDOUT" />
</root>
</configuration>

3

Sie können dies erreichen, indem Sie unten in der Befehlszeile selbst verwenden

 -e for error
-X for debug
-q for only error

z.B :

mvn test -X -DsomeProperties='SomeValue' [For Debug level Logs]
mvn test -e -DsomeProperties='SomeValue' [For Error level Logs]
mvn test -q -DsomeProperties='SomeValue' [For Only Error Logs]


2

Leider ist selbst mit Maven 3 die einzige Möglichkeit, dies zu tun, das Patchen des Quellcodes.

Hier ist eine kurze Anleitung, wie das geht.

Klon oder Gabel Maven 3 Repo: "Git-Klon https://github.com/apache/maven-3.git "

Bearbeiten Sie die Protokollierung org.apache.maven.cli.MavenCli # und ändern Sie sie

cliRequest.request.setLoggingLevel( MavenExecutionRequest.LOGGING_LEVEL_INFO );

zu

cliRequest.request.setLoggingLevel( MavenExecutionRequest.LOGGING_LEVEL_WARN );

In der aktuellen Snapshot-Version befindet es sich in Zeile 270

Führen Sie dann einfach "mvn install" aus. Ihre neue Maven-Distribution befindet sich im Ordner "apache-maven \ target \"

Siehe diesen Unterschied als Referenz: https://github.com/ushkinaz/maven-3/commit/cc079aa75ca8c82658c7ff53f18c6caaa32d2131


1
Diese Antwort lautet ab sofort OBSOLETE - a) Die Repo-URL hat sich geändert, b) der Code enthält keine Anweisung auf INFO-Ebene. C) Die diff-URL funktioniert nicht.
Greg Dubicki

Es spielt keine Rolle, wo der Code INFO verwendet - bei der Entwicklung von Plugins sollte sich Ihr Mojo auf den Maven-Logger verlassen getLog()-, wenn Sie mit der Konfigurierbarkeit leben können.
Adam

1

Der einfachste Weg ist ein Upgrade auf Maven 3.3.1 oder höher, um die ${maven.projectBasedir}/.mvn/jvm.configUnterstützung zu nutzen.

Anschließend können Sie alle Optionen aus der SimpleLogger- Unterstützung von Maven SL4FJ verwenden, um alle Logger oder bestimmte Logger zu konfigurieren. Im Folgenden finden Sie beispielsweise eine Anleitung zum Auslösen aller Warnungen auf warnEbene, mit Ausnahme der PMD, die für die Protokollierung konfiguriert ist error:

cat .mvn/jvm.config
-Dorg.slf4j.simpleLogger.defaultLogLevel=warn -Dorg.slf4j.simpleLogger.log.net.sourceforge.pmd=error

Sehen Sie hier , um weitere Informationen mit Maven Anmeldung.


1

Durch Ändern der infoto- errorin- simplelogging.propertiesDatei können Sie Ihre Anforderungen erfüllen.

Ändern Sie einfach den Wert der folgenden Zeile

org.slf4j.simpleLogger.defaultLogLevel=info 

zu

org.slf4j.simpleLogger.defaultLogLevel=error

0

Ich habe festgestellt, dass bei Verwendung der Version 2.20.1 des Maven Sunfire-Plugins alle Warnungen in eine Dumpstream-Datei geschrieben werden. z.B/myproject/target/surefire-reports/2017-11-11T23-02-19_850.dumpstream


0

Gehen Sie zu simplelogger.propertiesin ${MAVEN_HOME}/conf/logging/und legen Sie die folgenden Eigenschaften fest:

org.slf4j.simpleLogger.defaultLogLevel=warn
org.slf4j.simpleLogger.log.Sisu=warn
org.slf4j.simpleLogger.warnLevelString=warn

Und Vorsicht: warnnichtwarning

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.