我在哪里configurationJUnittesting类中的log4j?

看看我写的最后一个JUnittesting用例,我在类构造函数中调用了log4j的BasicConfigurator.configure()方法。 这对于运行Eclipse的“以JUnittesting用例运行”命令中的单个类运行良好。 但是我意识到这是不正确的:我敢肯定,我们的主要testing套件从一个进程运行所有这些类,因此log4jconfiguration应该发生在更高的地方。

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

LogManager类确定在加载类时运行的静态块中使用哪个log4jconfiguration。 有三种scheme供最终用户使用:

  1. 不要configurationlog4j; 使用默认configuration。
  2. 允许log4j在testing期间扫描类path以获取log4jconfiguration文件。
  3. 自己手动指定configuration文件的path并覆盖类pathsearch。 您可以使用以下参数直接指定configuration文件的位置:

    -Dlog4j.configuration=<path to properties file>

    在你的testing运行器configuration。

另见在线文档 。

我通常只是把一个log4j.xml文件放到src / test / resources中,然后让log4j自己find它:不需要代码,默认的log4j初始化会自动find它。 (我通常想把自己的logging器设置为“DEBUG”)

您可能想要研究简单的Java日志logging门面(SLF4J) 。 它是一个包装Log4j的外观,不需要像Log4j这样的初始化设置调用。 由于API差异很小,因此将Sfi4j的Log4j转换出来也相当容易。

我在log4j.xml中使用系统属性:

 ... <param name="File" value="${catalina.home}/logs/root.log"/> ... 

并开始testing:

 <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>