看看我写的最后一个JUnit测试用例,我在类构造函数中调用了log4j的BasicConfigurator.configure()方法。这对于从Eclipse的“作为JUnit测试用例运行”命令运行该单个类来说效果很好。但我意识到这是不正确的:我很确定我们的主要测试套件从一个进程运行所有这些类,因此log4j配置应该在某个地方更高。
但是我仍然需要自己运行一个测试用例,在这种情况下我想配置log4j。我应该在何处放置配置调用,以便在测试用例独立运行时运行,而不是在测试用例作为更大套件的一部分运行时运行?
答案 0 :(得分:57)
我通常只是将一个log4j.xml文件放入src / test / resources中,让log4j自己找到它:不需要代码,默认的log4j初始化会把它拿起来。 (我通常想将自己的记录器设置为'DEBUG')
答案 1 :(得分:49)
LogManager
类确定在加载类时运行的static block中使用哪个log4j配置。最终用户有三种选择:
log4j.defaultInitOverride
指定为false,则根本不会配置log4j。自己手动指定配置文件的路径并覆盖类路径搜索。您可以使用java
的以下参数直接指定配置文件的位置:
-Dlog4j.configuration=<path to properties file>
在您的测试运行器配置中。
允许log4j在测试期间扫描log4j配置文件的类路径。 (默认)
另请参阅online documentation。
答案 2 :(得分:6)
您可能需要查看Simple Logging Facade for Java (SLF4J)。它是一个包围Log4j的外观,它不需要像Log4j这样的初始设置调用。由于API差异很小,因此为Slf4j切换Log4j也相当容易。
答案 3 :(得分:5)
我在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>