在maven surefire下记录级别

时间:2010-10-15 02:31:26

标签: maven-2 junit surefire

我无法调整java logging的日志记录级别。我正在使用maven surefire(mvn test),并试图从默认的INFO调整到例如FINEST。

我在 src / test / resources / logging.properties

下有logging.properties文件

编译之后,我在target / test-classes下看到,我看到一个带有预期配置的logging.properties文件:

java.util.logging.ConsoleHandler.level = FINEST

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

...

但是来自glassfish的控制台输出只有INFO / SEVERE级别的消息。

我哪里出错了?或者这是maven屁股上的另一种痛苦?

4 个答案:

答案 0 :(得分:16)

我尝试在MAVEN_OPTS环境变量中设置java.util.logging.config.file,这不起作用,但最终通过将该系统属性放在pom.xml中来实现它(当然创建了一个合适的logging.properties在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>

答案 1 :(得分:8)

您需要在日志记录文件中指定处理程序

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

然后它应该工作

答案 2 :(得分:3)

尝试

${build.testOutputDirectory}/logging.properties

另外,我在命令行中使用surfire-args指定了这些内容。

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

答案 3 :(得分:1)

我正在查看这个确切的问题,但是每次我需要在测试中进行特定的日志记录时,都不希望项目配置(pom.xml)文件更改。

-D属性可以从maven命令行运行。

因此,您可以从命令行中选择日志记录配置文件:

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

如果您使用的是通用级别分母.level=FINEST,请注意第三方日志记录也会出现在该级别。

要禁用或设置maven或第三方日志记录到特定级别,请对所选日志配置文件中的这些类使用显式日志级别选择。

我有很多来自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

所以我补充说:

com.google.inject.level=INFO

到文件。请记住,级别设置是递归到所有子类。因此,com.level=NONE将禁用com域中所有记录器的所有日志记录。

将此与here所述的surefire插件中的测试选择功能-Dtest=...相结合,非常适合隔离错误和错误。