我们已经使用以下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
测试时?
提前感谢任何帮助或指示。
答案 0 :(得分:3)
好的,我现在发现了问题...在JUnit测试期间,我将记录器级别切换到Level.DEBUG
,并且负责切换记录器级别的方法称为以下方法BasicConfigurator.configure();
,这会创建一个第二个基本记录器。删除此方法后,调用重复的日志记录已经消失。