¿Cómo cambiar el nivel de registro de Maven para mostrar solo advertencias y errores?

Respuestas:

108

Respondiendo tu pregunta

Hice una pequeña investigación porque también estoy interesado en la solución.

Opciones de verbosidad de línea de comandos de Maven

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

  • -e por error
  • -X para depurar
  • -q solo por error

Archivo de configuración de registro de Maven

Actualmente, Maven 3.1.x utiliza SLF4J para iniciar sesión en System.out. Puede modificar la configuración de registro en el archivo:

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

De acuerdo con la página: http://maven.apache.org/maven-logging.html

Configuración de línea de comando

Creo que debería poder configurar el nivel de registro predeterminado del registrador simple a través de un parámetro de línea de comando, como este:

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

Pero no pude hacerlo funcionar . Supongo que el único problema con esto es que Maven recoge el nivel predeterminado del archivo de configuración en el classpath. También probé algunas otras configuraciones a través de System.properties, pero todas no tuvieron éxito.

Apéndice

Puede encontrar la fuente de slf4j en github aquí: slf4j github

La fuente del simplelogger aquí: slf4j / jcl-over-slf4j / src / main / java / org / apache / commons / logging / impl / SimpleLog.java

El cargador de plexo carga el simplelogger.properties.

kisp
fuente
2
¿Funcionó el simplelogger.propertiescambio? Cuando cambio la org.slf4j.simpleLogger.warnLevelStringconfiguración, se mvn compileactualiza de manera adecuada, pero parece estar ignorando la org.slf4j.simpleLogger.defaultLogLevelconfiguración. También se registra en el nivel de información, incluso cuando configuro eso para advertir o error.
Alden
1
@Alden, estoy teniendo el mismo comportamiento. Es simplemente ignorado.
jax
18
Para mí resultó que agregar "-Dorg.slf4j.simpleLogger.defaultLogLevel = info" al comando de compilación no tiene ningún efecto. Si defino esto antes de la compilación en MAVEN_OPTS de esta manera: exporta "MAVEN_OPTS = $ MAVEN_OPTS -Dorg.slf4j.simpleLogger.defaultLogLevel = debug", entonces funciona perfectamente sin cambiar el archivo $ {MAVEN_HOME} /conf/logging/simplelogger.properties. .
Gábor Lipták
1
Alden, Gábor Lipták: y para mí ninguno de los dos métodos funciona. :( Estoy usando Maven 3.2.5.
Greg Dubicki
1
si windows, en el archivo bat, use 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\])"

Ventanas:

mvn validate clean install | findstr /V /R "^\[INFO\] ^\[DEBUG\]"
Tom H
fuente
55
pero si el punto es reducir la E / S redundante durante mvn ... entonces no es realmente el truco
HoaPhan 03 de
¿Cómo podemos lograr lo mismo en la máquina Windows que egrep no funciona en ella?
hemanto
algo asímvn validate clean install | findstr /V /B "\[INFO\]" | findstr /V /B "\[WARN\]"
Tom H
Parece que findstradmite expresiones regulares y otras opciones que podrían hacerlo más conciso
Tom H
mvn validate clean install | findstr /V /R "^\[INFO\] ^\[WARN\]"
Tom H
32

Puede lograr esto con MAVEN_OPTS, por ejemplo
MAVEN_OPTS=-Dorg.slf4j.simpleLogger.defaultLogLevel=warn mvn clean

En lugar de poner la propiedad del sistema directamente en la línea de comando. (Al menos para maven 3.3.1.)

Considere usar ~/.mavenrcpara configurar MAVEN_OPTSsi desea cambiar el registro para su inicio de sesión en todas las invocaciones de Maven.

Binkley
fuente
2
Esto parece funcionar, ya que podría desactivar el mensaje de advertencia e información al establecer el nivel en error, pero desafortunadamente también apagó la salida normal. En realidad estaba tratando de deshabilitar algunas advertencias mientras ejecutaba el help:evaluateobjetivo para imprimir el valor de project.versiony esta salida (aunque no parece llegar slf4j) también se apagó.
haridsv
La única respuesta que funciona sin alterar permanentemente la instalación de Maven. Otra razón por la que Maven es un dinosaurio entre el sistema de construcción, simplemente no tiene soporte para los requisitos de sentido común.
Abhijit Sarkar
16

Si está utilizando Logback, simplemente coloque este logback-test.xmlarchivo en el src/test/resourcesdirectorio:

<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
fuente
3

puede lograr esto usando a continuación en la línea de comandos en sí

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

p.ej :

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
fuente
2

Desafortunadamente, incluso con Maven 3, la única forma de hacerlo es parchear el código fuente.

Aquí hay instrucciones breves sobre cómo hacerlo.

Clon o tenedor Maven 3 repo: "git clone https://github.com/apache/maven-3.git "

Edite el registro de org.apache.maven.cli.MavenCli # y cambie

cliRequest.request.setLoggingLevel( MavenExecutionRequest.LOGGING_LEVEL_INFO );

a

cliRequest.request.setLoggingLevel( MavenExecutionRequest.LOGGING_LEVEL_WARN );

En la versión actual de la instantánea, está en la línea 270

Luego, simplemente ejecute "mvn install", su nueva distribución de maven se ubicará en la carpeta "apache-maven \ target \"

Vea este diff para la referencia: https://github.com/ushkinaz/maven-3/commit/cc079aa75ca8c82658c7ff53f18c6caaa32d2131

Dmitry Sidorenko
fuente
1
Esta respuesta es OBSOLETO a partir de ahora: a) la URL del repositorio ha cambiado, b) no hay una declaración de nivel INFO en este código, c) la URL diff no funciona.
Greg Dubicki
No importa dónde use el código INFO: al desarrollar complementos, su mojo debe confiar en el registrador maven con getLog(), si puede vivir con la capacidad de configuración.
Adam
1

La forma más sencilla es actualizar a Maven 3.3.1 o superior para aprovechar el ${maven.projectBasedir}/.mvn/jvm.configsoporte.

Luego puede usar cualquier opción del soporte SimpleLogger de Maven's SL4FJ para configurar todos los registradores o registradores particulares. Por ejemplo, aquí hay una forma de hacer todas las advertencias a warnnivel, excepto un PMD que está configurado para iniciar sesión en error:

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

Consulte aquí para obtener más detalles sobre cómo iniciar sesión con Maven.

btiernay
fuente
1

Cambiar el archivo infoa erroren simplelogging.propertiesle ayudará a cumplir sus requisitos.

Simplemente cambie el valor de la línea de abajo

org.slf4j.simpleLogger.defaultLogLevel=info 

a

org.slf4j.simpleLogger.defaultLogLevel=error
Sumith08
fuente
0

He notado que cuando uso la versión 2.20.1 del complemento maven sunfire , todas las advertencias se escriben en un archivo dumpstream. p.ej/myproject/target/surefire-reports/2017-11-11T23-02-19_850.dumpstream

Hakan
fuente
0

Vaya a simplelogger.propertiesin ${MAVEN_HOME}/conf/logging/y configure las siguientes propiedades:

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

Y cuidado: warnnowarning

Gangnus
fuente