Comment changer le niveau de journalisation maven pour n'afficher que les avertissements et les erreurs?

142

Je veux empêcher maven d'afficher des messages INFO, je veux voir uniquement les AVERTISSEMENTS et les ERREURS (le cas échéant).

Comment puis-je y parvenir, de préférence en modifiant la ligne de commande qui appelle maven?

Sorin
la source
Sujet pertinent: stackoverflow.com/questions/71069/… . -B, --batch-modeou -qrendra mvnmoins verbeux.
Stanislav

Réponses:

108

Répondre à votre question

J'ai fait une petite enquête car je suis également intéressé par la solution.

Options de verbosité de la ligne de commande Maven

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

  • -e pour erreur
  • -X pour le débogage
  • -q pour seule erreur

Fichier de configuration de journalisation Maven

Actuellement, maven 3.1.x utilise SLF4J pour se connecter à System.out. Vous pouvez modifier les paramètres de journalisation dans le fichier:

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

Selon la page: http://maven.apache.org/maven-logging.html

Configuration de la ligne de commande

Je pense que vous devriez pouvoir configurer le niveau de journal par défaut de l'enregistreur simple via un paramètre de ligne de commande, comme ceci:

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

Mais je n'ai pas pu le faire fonctionner . Je suppose que le seul problème avec cela est que maven récupère le niveau par défaut du fichier de configuration sur le chemin de classe. J'ai également essayé quelques autres paramètres via System.properties, mais ils ont tous échoué.

appendice

Vous pouvez trouver la source de slf4j sur github ici: slf4j github

La source du simplelogger ici: slf4j / jcl-over-slf4j / src / main / java / org / apache / commons / logging / impl / SimpleLog.java

Le chargeur plexus charge le fichier simplelogger.properties.

kisp
la source
2
avez-vous fait fonctionner le simplelogger.propertieschangement? Lorsque je modifie le org.slf4j.simpleLogger.warnLevelStringparamètre mvn compile, il se met à jour de manière appropriée, mais il semble ignorer le org.slf4j.simpleLogger.defaultLogLevelparamètre. Il enregistre également au niveau des informations, même lorsque je le définis sur avertissement ou erreur.
Alden
1
@Alden, j'ai le même comportement. il est simplement ignoré.
jax
18
Pour moi, il s'est avéré que l'ajout de "-Dorg.slf4j.simpleLogger.defaultLogLevel = info" à la commande de construction n'a aucun effet. Si je définis ceci avant la construction dans MAVEN_OPTS comme ceci: export "MAVEN_OPTS = $ MAVEN_OPTS -Dorg.slf4j.simpleLogger.defaultLogLevel = debug", alors cela fonctionne parfaitement sans changer le fichier $ {MAVEN_HOME} /conf/logging/simplelogger.properties .
Gábor Lipták
1
Alden, Gábor Lipták: et pour moi, aucune des deux méthodes ne fonctionne. :( J'utilise Maven 3.2.5.
Greg Dubicki
1
si windows, dans le fichier bat, utilisez set MAVEN_OPTS =% MAVEN_OPTS% -Dorg.slf4j.simpleLogger.defaultLogLevel = warn
feilong
45

Linux:

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

ou

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

Les fenêtres:

mvn validate clean install | findstr /V /R "^\[INFO\] ^\[DEBUG\]"
Tom H
la source
5
mais si le but est de réduire les E / S redondantes pendant mvn ... alors ça ne fait pas vraiment l'affaire
HoaPhan
Comment pouvons-nous obtenir la même chose sur une machine Windows car egrep ne fonctionne pas dessus?
hemanto le
quelque chose commemvn validate clean install | findstr /V /B "\[INFO\]" | findstr /V /B "\[WARN\]"
Tom H le
On dirait qu'il findstrprend en charge les regex et d'autres options qui pourraient le rendre plus succinct - ss64.com/nt/findstr.html
Tom H
mvn validate clean install | findstr /V /R "^\[INFO\] ^\[WARN\]"
Tom H le
32

Vous pouvez y parvenir avec MAVEN_OPTS, par exemple
MAVEN_OPTS=-Dorg.slf4j.simpleLogger.defaultLogLevel=warn mvn clean

Plutôt que de mettre la propriété système directement sur la ligne de commande. (Au moins pour maven 3.3.1.)

Pensez à utiliser ~/.mavenrcpour le paramètre MAVEN_OPTSsi vous souhaitez modifier la journalisation de votre connexion à travers toutes les invocations maven.

Binkley
la source
2
Cela semble fonctionner car je pourrais désactiver le message d'avertissement et d'information en définissant le niveau sur erreur, mais malheureusement, cela a également désactivé la sortie normale. J'essayais en fait de désactiver certains avertissements lors de l'exécution de help:evaluatetarget pour imprimer la valeur de project.versionet cette sortie (même si elle ne semble pas passer slf4j) a également été désactivée.
haridsv
La seule réponse qui fonctionne sans perturber définitivement l'installation de Maven. Une autre raison pour laquelle Maven est un dinosaure parmi le système de construction - il ne prend tout simplement pas en charge les exigences de bon sens.
Abhijit Sarkar
16

Si vous utilisez Logback, placez simplement ce logback-test.xmlfichier dans le src/test/resourcesrépertoire:

<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
la source
3

vous pouvez y parvenir en utilisant ci-dessous dans la ligne de commande elle-même

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

par exemple :

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
la source
2

Malheureusement, même avec maven 3, le seul moyen de le faire est de patcher le code source.

Voici de brèves instructions pour y parvenir.

Cloner ou fourcher le dépôt Maven 3: "git clone https://github.com/apache/maven-3.git "

Modifier la journalisation org.apache.maven.cli.MavenCli # et modifier

cliRequest.request.setLoggingLevel( MavenExecutionRequest.LOGGING_LEVEL_INFO );

à

cliRequest.request.setLoggingLevel( MavenExecutionRequest.LOGGING_LEVEL_WARN );

Dans la version actuelle de l'instantané, c'est à la ligne 270

Ensuite, lancez simplement "mvn install", votre nouvelle distribution maven sera située dans le dossier "apache-maven \ target \"

Voir ce diff pour la référence: https://github.com/ushkinaz/maven-3/commit/cc079aa75ca8c82658c7ff53f18c6caaa32d2131

Dmitry Sidorenko
la source
1
Cette réponse est OBSOLETE à partir de maintenant - a) l'URL du dépôt a changé, b) il n'y a pas de déclaration de niveau INFO dans ce code, c) l'URL diff ne fonctionne pas.
Greg Dubicki
Peu importe où le code utilise INFO - lors du développement de plugins, votre mojo devrait s'appuyer sur le maven logger avec getLog()- si vous pouvez vivre avec la configurabilité.
Adam
1

Le moyen le plus simple est de passer à Maven 3.3.1 ou supérieur pour profiter du ${maven.projectBasedir}/.mvn/jvm.configsupport.

Ensuite, vous pouvez utiliser toutes les options du support SimpleLogger de SL4FJ de Maven pour configurer tous les enregistreurs ou enregistreurs particuliers. Par exemple, voici comment faire tous les avertissements au warnniveau, sauf pour un PMD qui est configuré pour se connecter à error:

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

Voir ici pour plus de détails sur la journalisation avec Maven.

Btiernay
la source
1

Changer le fichier infovers errorin vous simplelogging.propertiesaidera à répondre à vos besoins.

Changez simplement la valeur de la ligne ci-dessous

org.slf4j.simpleLogger.defaultLogLevel=info 

à

org.slf4j.simpleLogger.defaultLogLevel=error
Sumith08
la source
0

J'ai remarqué que lors de l'utilisation de la version 2.20.1 du plugin maven sunfire , tous les avertissements sont écrits dans un fichier de vidage. par exemple/myproject/target/surefire-reports/2017-11-11T23-02-19_850.dumpstream

Hakan
la source
0

Aller à simplelogger.propertiesdans ${MAVEN_HOME}/conf/logging/et définissez les propriétés suivantes:

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

Et méfiez-vous: warnnonwarning

Gangnus
la source