我在哪里配置JUnit测试类中的log4j?

时间:2009-05-18 15:37:10

标签: java logging junit log4j

看看我写的最后一个JUnit测试用例,我在类构造函数中调用了log4j的BasicConfigurator.configure()方法。这对于从Eclipse的“作为JUnit测试用例运行”命令运行该单个类来说效果很好。但我意识到这是不正确的:我很确定我们的主要测试套件从一个进程运行所有这些类,因此log4j配置应该在某个地方更高。

但是我仍然需要自己运行一个测试用例,在这种情况下我想配置log4j。我应该在何处放置配置调用,以便在测试用例独立运行时运行,而不是在测试用例作为更大套件的一部分运行时运行?

4 个答案:

答案 0 :(得分:57)

我通常只是将一个log4j.xml文件放入src / test / resources中,让log4j自己找到它:不需要代码,默认的log4j初始化会把它拿起来。 (我通常想将自己的记录器设置为'DEBUG')

答案 1 :(得分:49)

LogManager类确定在加载类时运行的static block中使用哪个log4j配置。最终用户有三种选择:

  1. 如果您将log4j.defaultInitOverride指定为false,则根本不会配置log4j。
  2. 自己手动指定配置文件的路径并覆盖类路径搜索。您可以使用java的以下参数直接指定配置文件的位置:

    -Dlog4j.configuration=<path to properties file>

    在您的测试运行器配置中。

  3. 允许log4j在测试期间扫描log4j配置文件的类路径。 (默认)

  4. 另请参阅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>