我想阻止 maven 显示 INFO 消息,我只想看到警告和错误(如果有的话)。
我怎样才能做到这一点,最好是通过更改调用 maven 的命令行?
回答你的问题
我做了一个小调查,因为我也对解决方案感兴趣。
Maven 命令行详细选项
-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
。
编辑:这个答案来自 2013 年,现在可能有更好的方法可以做到这一点,请考虑其他答案。
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\]"
mvn validate clean install | findstr /V /B "\[INFO\]" | findstr /V /B "\[WARN\]"
之类的东西
findstr
支持正则表达式和其他可能使其更简洁的选项 - ss64.com/nt/findstr.html
mvn validate clean install | findstr /V /R "^\[INFO\] ^\[WARN\]"
您可以使用 MAVEN_OPTS 实现此目的,例如
MAVEN_OPTS=-Dorg.slf4j.simpleLogger.defaultLogLevel=warn mvn clean
而不是将系统属性直接放在命令行上。 (至少对于 Maven 3.3.1。)
如果您希望在所有 Maven 调用中更改登录的日志记录,请考虑使用 ~/.mavenrc
设置 MAVEN_OPTS
。
help:evaluate
目标以打印 project.version
的值时尝试禁用一些警告,并且此输出(尽管似乎没有通过 slf4j
)也被关闭。
如果您使用 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>
您可以通过在命令行本身中使用下面来实现这一点
-e 用于错误 -X 用于调试 -q 仅用于错误
例如:
mvn test -X -DsomeProperties='SomeValue' [用于调试级别日志] mvn test -e -DsomeProperties='SomeValue' [用于错误级别日志] mvn test -q -DsomeProperties='SomeValue' [仅用于错误日志]
最简单的方法是升级到 Maven 3.3.1 或更高版本以利用 ${maven.projectBasedir}/.mvn/jvm.config
支持。
然后,您可以使用 Maven 的 SL4FJ 的 SimpleLogger 支持中的任何选项来配置所有记录器或特定记录器。例如,这里是一个如何在 warn
级别发出所有警告,除了配置为在 error
记录的 PMD:
cat .mvn/jvm.config
-Dorg.slf4j.simpleLogger.defaultLogLevel=warn -Dorg.slf4j.simpleLogger.log.net.sourceforge.pmd=error
有关使用 Maven 进行日志记录的更多详细信息,请参阅 here。
不幸的是,即使使用 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
getLog()
的 maven 记录器 - 如果您可以接受可配置性。
转到 ${MAVEN_HOME}/conf/logging/
中的 simplelogger.properties
并设置以下属性:
org.slf4j.simpleLogger.defaultLogLevel=warn
org.slf4j.simpleLogger.log.Sisu=warn
org.slf4j.simpleLogger.warnLevelString=warn
并当心:警告,而不是警告
我注意到在使用 2.20.1 版本的 the maven sunfire plugin 时,所有警告都写到了转储流文件中。例如/myproject/target/surefire-reports/2017-11-11T23-02-19_850.dumpstream
将 simplelogging.properties
文件中的 info
更改为 error
将有助于实现您的要求。
只需更改以下行的值
org.slf4j.simpleLogger.defaultLogLevel=info
至
org.slf4j.simpleLogger.defaultLogLevel=error
在 Debian 中,这对我来说就像一个魅力,可以在运行时更改 Maven 3.6 的日志级别,而无需更改 simplelogger.properties
文件:
MAVEN_OPTS='-Dorg.slf4j.simpleLogger.defaultLogLevel=error' mvn test
不定期副业成功案例分享
simplelogger.properties
更改生效?当我更改org.slf4j.simpleLogger.warnLevelString
设置时,mvn compile
会相应更新,但它似乎忽略了org.slf4j.simpleLogger.defaultLogLevel
设置。它还在信息级别记录,即使我将其设置为警告或错误。