我不熟悉日志记录,而我遇到的问题是Logger在我的控制台(NetBeans)中堆叠其输出。这通常不是问题,因为java程序只被调用一次,但出于好奇,从这一点开始我很好奇我做错了什么。
要复制问题,如果我为我的程序运行JUnit测试文件,我只会初始化该类:
MyClassTest{
MyClass instance = new MyClass(); // INITIALIZE MY CLASS WITH LOGGER
MyClassTest(){}
testMethod1(){}
testMethod2(){}
}
但是,当测试执行方法n时,对于每个MyClass的方法(已登录它们),会出现n个重复的日志消息。这显然是错误的。
示例:
Method1() {
logger.info("Applying Resources");
}
Method2() {
logger.info("Getting the entity of the URL response");
}
testMethod1输出:
INFO root - Applying Resources (Strings), (Region)
0 [main] INFO root - Applying Resources
testMethod2输出:
INFO root - Getting the entity of the URL response
455 [main] INFO root - Getting the entity of the URL response
455 [main] INFO root - Getting the entity of the URL response
我继续测试第n种方法的次数越多。
我在这里缺少什么?
代码:
public class MyClass {
public Logger logger;
public MyClass() {
logger = null; //Debug, info, warning, error, fatal
logger = Logger.getRootLogger();
BasicConfigurator.configure();
logger.setLevel(Level.INFO);
}
}
答案 0 :(得分:0)
以防上述评论不明显:
<Logger name="com.foo.Bar" level="trace" additivity="false">
或者
public void setAdditivity(boolean additive)
http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Category.html#setAdditivity(boolean)
答案 1 :(得分:0)
原来,删除这一行解决了我的问题:
BasicConfigurator.configure();
关于将可加性设置为false,这是删除初始
的解决方案INFO root - Applying Resources
尽管堆叠了日志消息,但仍在编写。