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


142

我想防止Maven显示INFO消息,我只希望看到警告和错误(如果有)。

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


相关主题:stackoverflow.com/questions/71069/…-B, --batch-mode-q会使mvn详细程度降低。
斯坦尼斯拉夫

Answers:


108

回答你的问题

我进行了一次小型调查,因为我也对该解决方案感兴趣。

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

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

命令行设置

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

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

但是我无法正常工作。我猜唯一的问题是,maven从类路径的配置文件中获取了默认级别。我还通过System.properties尝试了一些其他设置,但所有设置均未成功。

附录

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

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

丛加载器加载simplelogger.properties


2
您使simplelogger.properties更改生效了吗?当我适当更改org.slf4j.simpleLogger.warnLevelString设置时,mvn compile更新似乎被忽略了org.slf4j.simpleLogger.defaultLogLevel。即使我将其设置为警告或错误,它也会在信息级别记录日志。
2014年

1
@奥尔登,我也有同样的行为。它只是被忽略。
jax 2014年

18
对我来说,将“ -Dorg.slf4j.simpleLogger.defaultLogLevel = info”添加到生成命令没有任何效果。如果我在MAVEN_OPTS中像这样在构建之前定义此代码:export“ MAVEN_OPTS = $ MAVEN_OPTS -Dorg.slf4j.simpleLogger.defaultLogLevel = debug”,那么它完美地工作而无需更改$ {MAVEN_HOME} /conf/logging/simplelogger.properties文件。
的GaborLipták

1
Alden,GáborLipták:对我来说,这两种方法都不起作用。:(我使用Maven 3.2.5。
格雷格Dubicki

1
如果Windows在bat文件,使用设置MAVEN_OPTS =%MAVEN_OPTS%-Dorg.slf4j.simpleLogger.defaultLogLevel =警告
飞龙

45

Linux:

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

要么

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

视窗:

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

5
但是,如果要减少在mvn期间的冗余IO ...那么,这实际上不是解决问题的方法
HoaPhan 2015年

我们如何在Windows机器上实现相同的操作,而egrep无法在其上运行?
hemanto

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

似乎findstr支持正则表达式和其他可能使其更简洁的选项-ss64.com/nt/findstr.html
Tom H

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

32

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

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

如果要在所有Maven调用中更改登录名,请考虑使用~/.mavenrc用于设置MAVEN_OPTS


2
这似乎可行,因为我可以通过将级别设置为error来禁用警告和信息消息,但不幸的是,它也关闭了常规输出。我实际上是在尝试运行help:evaluate目标以打印的值时禁用一些警告,project.version并且此输出(尽管似乎没有通过slf4j)也被关闭了。
haridsv

在不永久干扰Maven安装的情况下起作用的唯一答案。Maven是构建系统中的恐龙的另一个原因-它只是不支持常识要求。
Abhijit Sarkar

16

如果使用的是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>

3

您可以通过在命令行本身中使用以下命令来实现

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

例如:

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

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

这是简短说明如何执行此操作。

克隆或分支Maven 3仓库:“ git clone https://github.com/apache/maven-3.git

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

cliRequest.request.setLoggingLevel( MavenExecutionRequest.LOGGING_LEVEL_INFO );

cliRequest.request.setLoggingLevel( MavenExecutionRequest.LOGGING_LEVEL_WARN );

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

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

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


1
到目前为止,此答案已过时-a)回购URL已更改,b)此代码中没有INFO级别的声明,c)diff URL不起作用。
格雷格·杜比奇

不管代码在哪里使用INFO-开发插件时,您的mojo都应该依赖于Maven记录器getLog()-如果您可以使用可配置性。
亚当,

1

最简单的方法是升级到Maven 3.3.1或更高版本以利用该${maven.projectBasedir}/.mvn/jvm.config支持。

然后,您可以使用Maven的SL4FJ的SimpleLogger支持中的任何选项来配置所有记录器或特定记录器。例如,以下是在warn级别上发出所有警告的方法,除了配置为登录的PMD之外error

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

有关使用Maven进行日志记录的更多详细信息,请参见此处


1

将文件更改infoerrorin simplelogging.properties将有助于满足您的要求。

只需更改以下行的值

org.slf4j.simpleLogger.defaultLogLevel=info 

org.slf4j.simpleLogger.defaultLogLevel=error

0

我已经注意到在使用2.20.1版本的maven sunfire插件时,所有警告均被记录到dumpstream文件中。例如/myproject/target/surefire-reports/2017-11-11T23-02-19_850.dumpstream


0

转到simplelogger.properties${MAVEN_HOME}/conf/logging/,并设置以下属性:

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

并且当心:warn,不是warning

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.