2009-10-15 71 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%