如果测试失败,则用于调试输出的 Log4j 附加程序

Fly*_*ard 5 java junit log4j junit-rule

我想设置我的测试日志,以便主要抑制日志输出 - 除非测试失败。然后我想要调试输出。

我知道只修改测试类路径中的 log4j.properties 的手动解决方案,或者只是让调试日志记录始终对测试处于活动状态 - 但我不想用不需要的绿色测试输出向控制台发送垃圾邮件。

对于失败的测试,我希望自动构建为我提供调试输出,以防出现一些奇怪的环境问题。

我一直在想应该有一个 appender 可以与 junit 规则结合使用,该规则在测试结果已知之前抑制输出,然后只有在测试失败时才推迟记录到另一个 appender。

我可能自己做这个,但我想知道是否有人以前尝试过这个,或者是否有更好的解决方案。

Ted*_*pin 0

您可以添加一个记录到单独记录器的观察程序。

public class MyUnitTest {

  private static Logger errorLog = Logger.getLogger("ErrorLogger");

  @Rule
  public TestWatcher testWatcher = new TestWatcher() {
    @Override
    protected void failed(Throwable e, Description description) {
        errorLog.debug(description.toString(), e);
        super.failed(e, description);
    }
  };

}
Run Code Online (Sandbox Code Playgroud)

然后只需添加ErrorLogger到您的 log4j 属性

log4j.logger.ErrorLogger=debug, someAppender
Run Code Online (Sandbox Code Playgroud)