如何更改maven日志记录级别以仅显示警告和错误?

sor*_*rin 133 logging maven-2 maven

我想阻止maven显示INFO消息,我想只看到警告和错误(如果有的话).

我怎样才能实现这一点,最好是通过更改调用maven的命令行来实现?

kis*_*isp 89

回答你的问题

我做了一个小调查,因为我也对解决方案感兴趣.

Maven命令行详细程度选项

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

  • -e表示错误
  • -X用于调试
  • -q仅用于错误

Maven日志配置文件

目前,maven 3.1.x使用SLF4J登录System.out.您可以修改文件中的日志记录设置:

${MAVEN_HOME}/conf/logging/simplelogger.properties
Run Code Online (Sandbox Code Playgroud)

根据页面:http://maven.apache.org/maven-logging.html

命令行设置

我认为您应该能够通过命令行参数设置简单记录器的默认日志级别,如下所示:

$ mvn clean package -Dorg.slf4j.simpleLogger.defaultLogLevel=debug
Run Code Online (Sandbox Code Playgroud)

我无法让它发挥作用.我想这是唯一的问题,maven从类路径上的配置文件中获取默认级别.我还通过System.properties尝试了其他几个设置,但所有设置都不成功.

附录

你可以在github上找到slf4j的源代码:slf4j github

这里是simplelogger的源码:slf4j/jcl-over-slf4j/src/main/java/org/apache/commons/logging/impl/SimpleLog.java

丛加载器加载simplelogger.properties.

  • 对我来说,结果是在构建命令中添加"-Dorg.slf4j.simpleLogger.defaultLogLevel = info"没有任何效果.如果我在MAVEN_OPTS中构建之前定义了这个:export"MAVEN_OPTS = $ MAVEN_OPTS -Dorg.slf4j.simpleLogger.defaultLogLevel = debug",那么它可以完美地工作,而无需更改$ {MAVEN_HOME} /conf/logging/simplelogger.properties文件. (17认同)
  • 你有没有让`simplelogger.properties`更改工作?当我更改`org.slf4j.simpleLogger.warnLevelString`设置`mvn compile`更新时,它似乎忽略了`org.slf4j.simpleLogger.defaultLogLevel`设置.它也会在信息级别记录,即使我将其设置为警告或错误. (2认同)

Tom*_*m H 43

Linux的:

mvn validate clean install | egrep -v "(^\[INFO\])"
Run Code Online (Sandbox Code Playgroud)

要么

mvn validate clean install | egrep -v "(^\[INFO\]|^\[DEBUG\])"
Run Code Online (Sandbox Code Playgroud)

视窗:

mvn validate clean install | findstr /V /R "^\[INFO\] ^\[DEBUG\]"
Run Code Online (Sandbox Code Playgroud)

  • 但如果要点是在mvn期间减少冗余IO ......那么它并不是真正的诀窍 (5认同)

bin*_*ley 30

例如,您可以使用MAVEN_OPTS实现此目的
MAVEN_OPTS=-Dorg.slf4j.simpleLogger.defaultLogLevel=warn mvn clean

而不是将系统属性直接放在命令行上.(至少对于maven 3.3.1.)

如果您希望在所有maven调用中为登录更改日志记录,请考虑使用~/.mavenrc进行设置MAVEN_OPTS.

  • 这似乎有效,因为我可以通过将级别设置为错误来禁用警告和信息消息,但不幸的是它也关闭了常规输出.我实际上是在尝试禁用一些警告,同时运行`help:evaluate`目标来打印`project.version`的值,这个输出(虽然似乎没有来自`slf4j`)也被关闭了. (2认同)

小智 17

如果您使用的是Logback,只需将此logback-test.xml文件放入src/test/resources目录:

<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>
Run Code Online (Sandbox Code Playgroud)


小智 10

您可以通过在命令行本身中使用以下内容来实现此目的

 -e for error
-X for debug
-q for only error
Run Code Online (Sandbox Code Playgroud)

例如:

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]
Run Code Online (Sandbox Code Playgroud)


小智 5

不幸的是,即使使用maven 3,唯一的方法就是修补源代码.

这是如何做到这一点的简短说明.

克隆或分叉Maven 3 repo:"git clone https://github.com/apache/maven-3.git "

编辑org.apache.maven.cli.MavenCli #logging,并进行更改

cliRequest.request.setLoggingLevel( MavenExecutionRequest.LOGGING_LEVEL_INFO );
Run Code Online (Sandbox Code Playgroud)

cliRequest.request.setLoggingLevel( MavenExecutionRequest.LOGGING_LEVEL_WARN );
Run Code Online (Sandbox Code Playgroud)

在当前的快照版本中,它位于第270行

然后只需运行"mvn install",你的新maven发行版将位于"apache-maven\target \"文件夹中

请参阅此差异以供参考:https://github.com/ushkinaz/maven-3/commit/cc079aa75ca8c82658c7ff53f18c6caaa32d2131