ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

相关主题:stackoverflow.com/questions/71069/…-B, --batch-mode-q 将使 mvn 不那么冗长。

C
Community

回答你的问题

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

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


您是否使 simplelogger.properties 更改生效?当我更改 org.slf4j.simpleLogger.warnLevelString 设置时,mvn compile 会相应更新,但它似乎忽略了 org.slf4j.simpleLogger.defaultLogLevel 设置。它还在信息级别记录,即使我将其设置为警告或错误。
@Alden,我也有同样的行为。它只是被忽略了。
对我来说,在构建命令中添加“-Dorg.slf4j.simpleLogger.defaultLogLevel=info”没有任何效果。如果我在构建 MAVEN_OPTS 之前这样定义它:export "MAVEN_OPTS=$MAVEN_OPTS -Dorg.slf4j.simpleLogger.defaultLogLevel=debug",那么它可以在不更改 ${MAVEN_HOME}/conf/logging/simplelogger.properties 文件的情况下完美运行.
Alden, Gábor Lipták:对我来说,这两种方法都不起作用。 :( 我正在使用 Maven 3.2.5。
如果 Windows,在 bat 文件中,使用 set MAVEN_OPTS=%MAVEN_OPTS% -Dorg.slf4j.simpleLogger.defaultLogLevel=warn
T
Tom

编辑:这个答案来自 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 期间减少冗余 IO ......那么它并不是真正的诀窍
我们如何在 Windows 机器上实现与 egrep 无法在其上相同的效果?
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\]"
J
Josmar

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

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

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


这似乎可行,因为我可以通过将级别设置为错误来禁用警告和信息消息,但不幸的是它也关闭了常规输出。我实际上是在运行 help:evaluate 目标以打印 project.version 的值时尝试禁用一些警告,并且此输出(尽管似乎没有通过 slf4j)也被关闭。
唯一不会永久弄乱 Maven 安装的答案。 Maven 是构建系统中的恐龙的另一个原因 - 它只是不支持常识要求。
G
Greg Dubicki

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

M
MD AFSAR ALI

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

-e 用于错误 -X 用于调试 -q 仅用于错误

例如:

mvn test -X -DsomeProperties='SomeValue' [用于调试级别日志] mvn test -e -DsomeProperties='SomeValue' [用于错误级别日志] mvn test -q -DsomeProperties='SomeValue' [仅用于错误日志]


有更多信息会很好,比如这是否启用或禁用相应的日志
b
btiernay

最简单的方法是升级到 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


D
Dmitry Sidorenko

不幸的是,即使使用 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


到目前为止,此答案已过时-a)repo URL已更改,b)此代码中没有INFO级别的语句,c)diff URL不起作用。
代码在哪里使用 INFO 无关紧要 - 在开发插件时,您的 mojo 应该依赖带有 getLog() 的 maven 记录器 - 如果您可以接受可配置性。
G
Gangnus

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

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

并当心:警告,而不是警告


H
Hakan Özler

我注意到在使用 2.20.1 版本的 the maven sunfire plugin 时,所有警告都写到了转储流文件中。例如/myproject/target/surefire-reports/2017-11-11T23-02-19_850.dumpstream


S
Sumith08

simplelogging.properties 文件中的 info 更改为 error 将有助于实现您的要求。

只需更改以下行的值

org.slf4j.simpleLogger.defaultLogLevel=info 

org.slf4j.simpleLogger.defaultLogLevel=error

由于这是源代码的更改而被否决,而我相信发布者想要一个命令行方法,我当然愿意!
c
confirmator

在 Debian 中,这对我来说就像一个魅力,可以在运行时更改 Maven 3.6 的日志级别,而无需更改 simplelogger.properties 文件:

MAVEN_OPTS='-Dorg.slf4j.simpleLogger.defaultLogLevel=error' mvn test