Log4j复制

时间:2014-02-13 21:35:22

标签: java log4j

我不熟悉日志记录,而我遇到的问题是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);
    }
}

2 个答案:

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

尽管堆叠了日志消息,但仍在编写。