【问题标题】:How to change maven logging level to display only warning and errors?如何更改 Maven 日志记录级别以仅显示警告和错误?
【发布时间】:2011-06-14 12:04:22
【问题描述】:

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

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

【问题讨论】:

标签: maven-2 logging maven


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    编辑:这个答案来自 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\]"
    【解决方案3】:

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

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

    请注意:warn,而不是 warning

    【讨论】:

      【解决方案4】:

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

       -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]

      【讨论】:

      • 如果有更多信息就好了,比如这会启用还是禁用相应的日志
      【解决方案5】:

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

      只需更改以下行的值

      org.slf4j.simpleLogger.defaultLogLevel=info 
      

      org.slf4j.simpleLogger.defaultLogLevel=error
      

      【讨论】:

      • 投反对票,因为这是对源代码的更改,而我相信发帖者想要一个命令行方法,我当然愿意!
      【解决方案6】:

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

      【讨论】:

        【解决方案7】:

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

        【讨论】:

          【解决方案8】:

          您可以使用 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 是构建系统中的恐龙的另一个原因 - 它只是不支持常识要求。
          【解决方案9】:

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

          【讨论】:

            【解决方案10】:

            回答您的问题

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

            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
            【解决方案11】:

            不幸的是,即使使用 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 记录器 - 如果你可以接受可配置性的话。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-08-21
            • 1970-01-01
            • 2014-09-01
            • 2023-04-11
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多