我如何抑制一些Maven日志但保留其他输出?

时间:2019-05-16 04:58:37

标签: java maven logging slf4j

我正在CI环境中运行Maven,并希望查看其某些日志输出-但我不想看到有关下载工件等的常规消息。

我可以使用-q,但是这也会抑制所有有用的东西。

Maven使用slf4j,默认情况下使用slf4j-simple后端,因此没有logging.properties等,无论如何,我什至如何找出哪个类生成日志消息?

例如如果我有

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] 
[INFO] XXX JDBC Driver - JDBC 4.2                             [bundle]
[INFO] XXX JDBC Driver aggregate                                   [pom]
[INFO] 
[INFO] -----------------< XXX:XXX >------------------
[INFO] Building XXX JDBC Driver - JDBC 4.2 XXXX           [1/2]
[INFO] -------------------------------[ bundle ]-------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ XXXX-jdbc ---
[INFO] Deleting XXXX/target
[INFO] 
[INFO] --- maven-enforcer-plugin:1.3.1:enforce (enforce-java) @ XXX-jdbc ---
[INFO] 
[INFO] --- build-helper-maven-plugin:1.5:parse-version (parse-version) @ XXXX-jdbc ---
[INFO] 
[INFO] --- properties-maven-plugin:1.0-alpha-2:read-project-properties (default) @ XXXX-jdbc ---
[WARNING] Ignoring missing properties file: XXX/build.local.properties
[INFO] 
[INFO] --- jcp:6.0.1:preprocess (preprocessSources) @ XXX-jdbc ---
[INFO] Added MAVEN property mvn.project.name=XXX JDBC Driver - JDBC 4.2
[INFO] Added MAVEN property mvn.project.version=XX.YY.ZZ
.... blah blah blah ...
-------------------------------------------------------
 T E S T S
-------------------------------------------------------

Running XXX.TestSuite
Tests run: 58, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 6.43 sec

对于这个任务,我只需要测试输出,我该怎么做?

1 个答案:

答案 0 :(得分:0)

Maven使用slf4j-simple。它的配置从类路径加载到文件simplelogger.properties中。您可以修改类路径以首先放置自己的文件副本,但也可以通过设置系统属性来覆盖这些属性。

首先使用-D-Dorg.slf4j.simpleLogger.showLogName=true重新运行您的构建,以便您可以查看日志来自哪些类。然后通过设置名为-Dorg.slf4.simpleLogger.log.[[classname]]=[[level]]的其他属性来根据需要调整日志级别。

您可能还需要使用-B(批量)标志

我发现在项目的.mvn/maven.config文件中设置它们很方便,但是您可以使用MAVEN_OPTS或命令行代替。示例.mvn/maven.config可能是:

-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
-Dorg.slf4j.simpleLogger.log.com.igormaznitsa.jcp.maven.PreprocessorMojo=warn
-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.event.ExecutionEventLogger=warn
-Dorg.slf4j.simpleLogger.log.org.apache.maven.shared.filtering.DefaultMavenResourcesFiltering=warn
-Dorg.slf4j.simpleLogger.log.org.apache.maven.plugin.clean.CleanMojo=warn
-Dorg.slf4j.simpleLogger.showLogName=true

请注意,将这些选项放在正在编译的项目的simplelogging.properties中将不起作用,它必须位于 maven的类路径中运行时

还请注意,.mvn/maven.config似乎不支持注释。我尝试了#;///* .. */