I had the same problem, and in the end I myself coded the application. This 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. For instance. eg:
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%
source share