java - JUnit 测试期间重复的 log4j 输出

标签 java eclipse junit log4j

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

# 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 测试时有什么想法吗? 预先感谢您的任何帮助或指示。

最佳答案

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

关于java - JUnit 测试期间重复的 log4j 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29930159/

相关文章:

java - 如何在 Eclipse 中使用 m2e 处理 'mvn compile' 和 'mvn package'?

带 merge 的 Eclipse EGit Rebase

eclipse - 无法运行包含来自 Eclipse 的线程的 JUnit 测试用例

androidTestCompile 在 Android Studio 2.1.2 中不起作用

java - jfreechart - 为每个饼图自定义饼图标签

java - OpenGL透视投影: How to define left and right

java - 无需身份验证的 GAE + GWT Servlet

java - 调试执行冒险

spring - 如何使用 Spring 的 RestTemplate 模拟 curl REST 调用?

java - 如何在初始握手时从 Spring Websocket 检索 session ID 并在以后使用?