Logging level under maven surefire

2020-02-01 07:06发布

问题:

I'm unable to adjust java logging's logging level. I'm using maven surefire (mvn test), and trying to adjust from the default INFO to e.g. FINEST.

I have logging.properties file under src/test/resources/logging.properties

after compile, i see under target/test-classes, i see a logging.properties file with the intended config:

java.util.logging.ConsoleHandler.level=FINEST

javax.enterprise.system.container.ejb.level=FINE

...

however the console output from glassfish only have INFO / SEVERE level messages.

Where did I go wrong? or is this another pain in the butt thing with maven?

回答1:

You need to specifiy your handlers in the logging file

handlers = java.util.logging.ConsoleHandler, java.util.logging.FileHandler

then it should work



回答2:

I tried setting java.util.logging.config.file in the MAVEN_OPTS environment variable, which does not work but finally got it working by putting that system property in the pom.xml (and of course creating an appropriate logging.properties in src/test/resources):

    <plugins>
      <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
           <systemProperties>
             <property> 
               <name>java.util.logging.config.file</name>
               <value>src/test/resources/logging.properties</value>
             </property>
           </systemProperties>
        </configuration>
      </plugin>
    </plugins>


回答3:

try

${build.testOutputDirectory}/logging.properties

Also, I specify this stuff on the command line with surfire-args.

<argLine>${surefire.argLine} ${argLine} -Djava.util.logging.config.file=${build.testOutputDirectory}/logging.properties</argLine>


回答4:

I was looking at this exact issue, but did not want a project configuration (pom.xml) file change for every time I need specific logging on a test.

The -D property works from maven command line.

Thus you can select the logging configuration file from the command line:

mvn -Djava.util.logging.config.file=`enter filename here` test

If you are using the generic level denominator .level=FINEST be aware that 3rd party logging will also appear at that level.

To disable or set the maven or 3rd party logging to a specific level use explicit log level selection for those classes in the selected log configuration file.

I have a lot of log lines from com.google.inject.....

aug 08, 2014 12:14:33 PM com.google.inject.internal.util.$Stopwatch resetAndLog
FINE: Instance member validation: 3ms
aug 08, 2014 12:14:33 PM com.google.inject.internal.util.$Stopwatch resetAndLog
FINE: Provider verification: 1ms
aug 08, 2014 12:14:33 PM com.google.inject.internal.util.$Stopwatch resetAndLog
FINE: Static member injection: 1ms

So I add:

com.google.inject.level=INFO

to the file. Remember that the level setting is recursive to all subclasses. Thus com.level=NONE will disable all logging for all loggers from the com domain.

Combining this with the test select feature -Dtest=... in the surefire plugin described here is very good for isolating bugs and errors.