在JUnit测试期间重复的log4j输出

时间:2015-04-28 21:21:00

标签: java eclipse junit log4j

我们已经使用以下log4j文件实现了log4j.properties控制台记录器:

# Set root logger level to info and its only appender to default.
log4j.rootCategory=INFO, default

# default is set to be a ConsoleAppender.
log4j.appender.default=org.apache.log4j.ConsoleAppender

# default uses PatternLayout.
log4j.appender.default.layout=org.apache.log4j.PatternLayout
log4j.appender.default.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

log4j.logger.org.hibernate=error

在eclipse中正常执行程序时一切正常,但是当我们启动我们的JUnit测试之一时,它们也会使用记录器调用程序的一部分,我们总是在eclipse控制台上获得重复的记录器输出。尽管它不会影响我们的测试,但如果它们不会重复,我们仍然可以更容易地读取记录器信息。

这是我们第一次使用log4j时的配置方式:

public ConsoleTextLogger(final Class<?> clazz) {
    super();
    this.logger = Logger.getLogger(clazz.getName());
    // loads the configuration file and configures the log4j logging framework
    if (LOGGERLOGGER == null) {
        URL url = getClass().getResource("log4j.properties");
        PropertyConfigurator.configure(url);
    }
}

这就是我们在一个JUnit类中使用记录器的方法:

public class TestClass1 {
   @BeforeClass
   public static void setup() {
      TestSetupUtility.loadPath();
   }

   // TESTS
}

TestSetupUtility设置了我们进行不同测试所需的一切。

public class TestSetupUtility {
  /**
   * Class specific Logger.
   */
  protected static final ConsoleTextLogger LOGGER = new ConsoleTextLogger(TestSetupUtility.class);
}

任何可能导致此类现象的想法,以及为什么只有在运行JUnit测试时? 提前感谢任何帮助或指示。

1 个答案:

答案 0 :(得分:3)

好的,我现在发现了问题...在JUnit测试期间,我将记录器级别切换到Level.DEBUG,并且负责切换记录器级别的方法称为以下方法BasicConfigurator.configure();,这会创建一个第二个基本记录器。删除此方法后,调用重复的日志记录已经消失。