是否有一个与TestNG连接的log4j appender?[英] Is there a log4j appender that connects with TestNG?

本文是小编为大家收集整理的关于是否有一个与TestNG连接的log4j appender?的处理/解决方法,可以参考本文帮助大家快速定位并解决问题,中文翻译不准确的可切换到English标签页查看源文。

问题描述

我使用log4j,并且想要通常在我的日志记录设施中最终出现的日志消息,以出现在我的单元测试中创建的测试报告中.

我认为这意味着一个log4j Appender在我的Maven项目的SRC/Test/Resources目录中输出到testng Listener和适当的log4j配置.这是正确的吗?

编写似乎很容易,但是我可以通过Maven吸入吗?

推荐答案

我遇到了同样的问题,最终我自己编码了一个附录.实际上很简单:

复制以下类:

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;
  }
}

并像控制台Appender一样配置它.例如.这样:

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%

其他推荐答案

这篇文章也可能会帮助您:

" 将Commons-Logging输出与测试案例报告集成在一起/p>

本文地址:https://www.itbaoku.cn/post/1574885.html

问题描述

I use log4j and would like log messages that normally end up in my logging facility to appear in the test reports created by TestNG during my unit tests.

I think that would mean a log4j Appender which outputs to a TestNG Listener and an appropriate log4j config in the src/test/resources directory of my Maven project. Is that correct?

It seems fairly easy to write, but is there something I just can pull in via Maven?

推荐答案

I had the same problem and eventually coded an appender myself. It is actually quite simple:

Copy the following class:

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;
  }
}

and configure it just like a console appender. E.g. like this:

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%

其他推荐答案

This post might also help you:

"Integrate commons-logging output with testNG test case reports"