I'm running Maven in a CI environment and want to see some of its log output - but I don't want to see routine messages about downloading artifacts etc.
I can use -q but that suppresses everything useful too.
Maven uses slf4j and by default uses the slf4j-simple backend so there's no logging.properties etc, and anyway how would I even find out which class generates the log messages?
e.g. if I have
[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
and for this task I just want the test output, how do I do that?
Maven uses slf4j-simple. Its configuration is loaded from the classpath in a file simplelogger.properties. You can modify the classpath to put your own copy of this file first, but you can also override these properties by setting system properties.
First re-run your build with -Dorg.slf4j.simpleLogger.showLogName=true so you can see which classes the logs are coming from. Then adjust log levels as desired by setting additional properties named -Dorg.slf4j.simpleLogger.log.[[classname]]=[[level]].
You may require the -B (batch) flag too.
I find it convenient to set these in a .mvn/maven.config file in my project, but you can use MAVEN_OPTS or the command line instead. An example .mvn/maven.config might be:
-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
Note that putting these options in a simplelogging.properties of the project being compiled will not work, it must be in the classpath of the maven runtime.
Also beware that .mvn/maven.config doesn't appear to support comments. I tried #, ;, //, /* .. */.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With