问题描述
我使用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%
其他推荐答案
这篇文章也可能会帮助您:
问题描述
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"