7

我使用 log4j,并希望通常最终出现在我的日志记录工具中的日志消息出现在我的单元测试期间由 TestNG 创建的测试报告中。

我认为这意味着Appender输出到 TestNGListener的 log4j 和我的 Maven 项目的 src/test/resources 目录中的适当 log4j 配置。那是对的吗?

编写起来似乎相当容易,但有什么我可以通过 Maven 获取的吗?

4

2 回答 2

7

我遇到了同样的问题,最终自己编写了一个 appender。其实很简单:

复制以下类:

public class TestNGReportAppender extends AppenderSkeleton {

  @Override
  protected void append(final LoggingEvent event) {
    Reporter.log(eventToString(event));
  }

  private String eventToString(final LoggingEvent event) {
    final StringBuilder result = new StringBuilder(layout.format(event));

    if(layout.ignoresThrowable()) {
      final String[] s = event.getThrowableStrRep();
      if (s != null) {
        for (final String value : s) {
          result.append(value).append(Layout.LINE_SEP);
        }
      }
    }
    return result.toString();
  }

  @Override
  public void close() {

  }

  @Override
  public boolean requiresLayout() {
    return true;
  }
}

并像控制台附加程序一样配置它。比如像这样:

log4j.appender.testNG=some.package.TestNGReportAppender
log4j.appender.testNG.layout=org.apache.log4j.EnhancedPatternLayout
log4j.appender.testNG.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%
于 2014-01-13T14:21:39.537 回答
1

这篇文章也可能对您有所帮助:

"将 commons-logging 输出与 testNG 测试用例报告集成"

于 2009-10-23T14:56:42.413 回答