2009-10-15 46 views
4

我使用log4j,并希望日志消息通常最终在我的日志工具中出现在由TestNG在我的单元测试期间创建的测试报告中。是否有与TestNG连接的log4j appender?

我认为这将意味着输出到TestNG Listener的log4j Appender以及我的Maven项目的src/test/resources目录中的相应log4j配置。那是对的吗?

写起来似乎相当容易,但是我可以通过Maven插入吗?

+0

这StackOverflow的线程可能是相关的提问: http://stackoverflow.com/questions/473911/testng-multiple-suites-possible-to-merge-reports – Adrian

回答

3

我有同样的问题,并最终编码一个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%