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?

Sorin
quelle
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.

kisp
quelle
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\]"
Tom H.
quelle
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.

Binkley
quelle
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>
Pawel Wrzeszcz
quelle
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]

MD AFSAR ALI
quelle
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

Dmitry Sidorenko
quelle
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.

Übrigens
quelle
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
Sumith08
quelle
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

Hakan
quelle
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

Gangnus
quelle