在哪里可以在JUnit测试类中配置log4j?
看看我写的最后一个JUnit测试用例,我在类构造函数中调用了log4j的BasicConfigurator.configure()方法。这对于从Eclipse的“作为JUnit测试用例运行”命令运行这个单独的类来说工作得很好。但是我意识到这是不正确的:我非常确定我们的主测试套件从一个进程运行所有这些类,因此log4j配置应该在某处更高。在哪里可以在JUnit测试类中配置log4j?
但我仍然需要自己运行一个测试用例,在这种情况下,我希望配置log4j。我应该在哪里放置配置调用,以便在测试用例独立运行时运行,而不是在测试用例作为更大套件的一部分运行时运行?
LogManager
类决定在加载类时运行的static block中使用哪个log4j配置。有三种选项适用于最终用户:
- 不要配置log4j;使用默认配置。
- 允许log4j在测试期间扫描类路径以获取log4j配置文件。
-
自己手动指定配置文件的路径并覆盖类路径搜索。您可以直接通过以下参数
java
指定配置文件的位置:
在你的测试运行配置-Dlog4j.configuration=<path to properties file>
。
另请参阅online documentation。
您可能想要查看Simple Logging Facade for Java (SLF4J)。它是一个包装Log4j的外观,不需要像Log4j这样的初始设置调用。由于API差异很小,因此为Slf4j切换Log4j也相当容易。
我通常只是把一个log4j.xml文件放到src/test/resources中,让log4j自己找到它:不需要代码,默认的log4j初始化会自动找到它。 (我通常要设置我自己的记录器“DEBUG”反正)
对于标准建筑物测试,我会将Log4j设置为警告或者甚至是错误。如果测试成功(也是负面测试),则不应该有日志记录,这会引起用户的注意。 – keiki 2012-11-21 13:15:58
我的log4j.xml使用系统属性:
...
<param name="File" value="${catalina.home}/logs/root.log"/>
...
,并开始测试:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.16</version>
<configuration>
<systemProperties>
<property>
<name>catalina.home</name>
<value>${project.build.directory}</value>
</property>
</systemProperties>
</configuration>
</plugin>
它怎么会知道这是一个“log4j配置文件?”什么是文件名? (log4j.xml?) – Chad 2013-08-24 02:37:44
@Chad:我编辑了我的答案来解决你的问题。请参阅静态块的链接,以确切了解它如何实现。 – 2013-08-29 04:15:54
我正在使用log4j2,我必须使用以下设置来指示文件:'-Dlog4j.configurationFile = log4j2.xml'。另外,如果您尝试调试加载/启动,则此设置很有用:'-Dlog4j2.debug = true'。 – Kent 2017-11-02 00:40:14