Come modificare il livello di registrazione di Maven per visualizzare solo avvisi ed errori?


142

Voglio impedire a maven di visualizzare i messaggi INFO, voglio vedere solo AVVERTENZE ed ERRORI (se presenti).

Come posso ottenere questo, preferibilmente cambiando la riga di comando che chiama Maven?


Argomento pertinente: stackoverflow.com/questions/71069/… . -B, --batch-modeo -qrenderà mvnmeno prolisso.
Stanislav,

Risposte:


108

Rispondere alla tua domanda

Ho fatto una piccola indagine perché sono anche interessato alla soluzione.

Opzioni di verbosità della riga di comando di Maven

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

  • -e per errore
  • -X per il debug
  • -q per solo errore

File di configurazione della registrazione Maven

Attualmente maven 3.1.x utilizza SLF4J per accedere a System.out. È possibile modificare le impostazioni di registrazione nel file:

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

Secondo la pagina: http://maven.apache.org/maven-logging.html

Impostazione della riga di comando

Penso che dovresti essere in grado di impostare il livello di log predefinito del logger semplice tramite un parametro della riga di comando, come questo:

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

Ma non sono riuscito a farlo funzionare . Immagino che l'unico problema sia che Maven raccoglie il livello predefinito dal file di configurazione sul percorso di classe. Ho anche provato un paio di altre impostazioni tramite System.properties, ma tutte non hanno avuto successo.

Appendice

Puoi trovare la fonte di slf4j su github qui: slf4j github

La fonte del semplicelogger qui: slf4j / jcl-over-slf4j / src / main / java / org / apache / commons / logging / impl / SimpleLog.java

Il caricatore di plesso carica il simplelogger.properties.


2
hai fatto simplelogger.propertiesfunzionare il resto? Quando modifico le org.slf4j.simpleLogger.warnLevelStringimpostazioni in modo mvn compileappropriato, ma sembra ignorare l' org.slf4j.simpleLogger.defaultLogLevelimpostazione. Registra anche a livello di informazioni, anche quando lo imposto per avvisare o errore.
Alden,

1
@Alden, sto ottenendo lo stesso comportamento. è semplicemente ignorato.
jax

18
Per me è risultato che l'aggiunta di "-Dorg.slf4j.simpleLogger.defaultLogLevel = info" al comando build non ha alcun effetto. Se lo definisco prima della compilazione in MAVEN_OPTS in questo modo: esporta "MAVEN_OPTS = $ MAVEN_OPTS -Dorg.slf4j.simpleLogger.defaultLogLevel = debug", quindi funziona perfettamente senza modificare il file $ {MAVEN_HOME} /conf/logging/simplelogger.properties .
Gábor Lipták,

1
Alden, Gábor Lipták: e per me nessuno dei due metodi funziona. :( Sto usando Maven 3.2.5.
Greg Dubicki il

1
se windows, in file bat, usa set MAVEN_OPTS =% MAVEN_OPTS% -Dorg.slf4j.simpleLogger.defaultLogLevel = warn
feilong

45

Linux:

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

o

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

Finestre:

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

5
ma se il punto è ridurre l'IO ridondante durante mvn ... allora non è proprio il trucco
HoaPhan

Come possiamo ottenere lo stesso sul computer Windows come egrep non funziona su di esso?
Hemanto,

qualcosa del generemvn validate clean install | findstr /V /B "\[INFO\]" | findstr /V /B "\[WARN\]"
Tom H,

Sembra che findstrsupporti regex e altre opzioni che potrebbero renderlo più sintetico - ss64.com/nt/findstr.html
Tom H

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

32

Puoi farlo con MAVEN_OPTS, ad esempio
MAVEN_OPTS=-Dorg.slf4j.simpleLogger.defaultLogLevel=warn mvn clean

Invece di mettere la proprietà di sistema direttamente sulla riga di comando. (Almeno per Maven 3.3.1.)

Prendi in considerazione l'utilizzo ~/.mavenrcper l'impostazione MAVEN_OPTSse desideri che la registrazione venga modificata per il tuo accesso in tutte le chiamate invocate.


2
Questo sembra funzionare poiché potrei disabilitare l'avviso e il messaggio informativo impostando il livello su errore, ma sfortunatamente ha anche disattivato l'output normale. In realtà stavo cercando di disabilitare alcuni avvisi mentre eseguivo help:evaluatetarget per stampare il valore di project.versione anche questo output (anche se non sembra arrivare slf4j) è stato disattivato.
Haridsv,

L'unica risposta che funziona senza interferire in modo permanente con l'installazione di Maven. Un altro motivo per cui Maven è un dinosauro nel sistema di costruzione - semplicemente non ha supporto per i requisiti di buon senso.
Abhijit Sarkar,

16

Se si utilizza Logback, basta inserire questo logback-test.xmlfile nella src/test/resourcesdirectory:

<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

è possibile ottenere ciò utilizzando di seguito nella riga di comando stessa

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

per esempio :

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

Sfortunatamente, anche con Maven 3 l'unico modo per farlo è patchare il codice sorgente.

Ecco alcune brevi istruzioni su come farlo.

Clone o fork repository Maven 3: "git clone https://github.com/apache/maven-3.git "

Modifica la registrazione org.apache.maven.cli.MavenCli # e modifica

cliRequest.request.setLoggingLevel( MavenExecutionRequest.LOGGING_LEVEL_INFO );

per

cliRequest.request.setLoggingLevel( MavenExecutionRequest.LOGGING_LEVEL_WARN );

Nella versione attuale dell'istantanea è alla linea 270

Quindi esegui "mvn install", la nuova distribuzione di Maven si troverà nella cartella "apache-maven \ target \"

Vedi questo diff per il riferimento: https://github.com/ushkinaz/maven-3/commit/cc079aa75ca8c82658c7ff53f18c6caaa32d2131


1
Al momento questa risposta è OBSOLETA - a) l'URL del repository è cambiato, b) non esiste un'istruzione di livello INFO in questo codice, c) l'URL diff non funziona.
Greg Dubicki,

Non importa dove il codice utilizza INFO - quando si sviluppano plugin, il tuo mojo dovrebbe fare affidamento sul logger maven getLog()- se riesci a convivere con la configurabilità.
Adam,

1

Il modo più semplice è eseguire l'aggiornamento a Maven 3.3.1 o versioni successive per usufruire del ${maven.projectBasedir}/.mvn/jvm.configsupporto.

Quindi è possibile utilizzare qualsiasi opzione dal supporto SimpleLogger di Maven SL4FJ per configurare tutti i logger o logger particolari. Ad esempio, ecco un modo per inviare tutti gli avvisi a warnlivello, ad eccezione di un PMD configurato per accedere a error:

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

Vedi qui per maggiori dettagli sulla registrazione con Maven.


1

La modifica della infoa errornel simplelogging.propertiesfile sarà aiuterà a raggiungere il vostro requisito.

Basta cambiare il valore della riga sottostante

org.slf4j.simpleLogger.defaultLogLevel=info 

per

org.slf4j.simpleLogger.defaultLogLevel=error

0

Ho notato che quando si utilizza la versione 2.20.1 del plug-in Maven Sunfire , tutti gli avvisi vengono scritti in un file dumpstream. per esempio/myproject/target/surefire-reports/2017-11-11T23-02-19_850.dumpstream


0

Vai a simplelogger.propertiesin ${MAVEN_HOME}/conf/logging/e imposta le seguenti proprietà:

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

E attenzione: warnnowarning

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.