Я перевожу Log4j1.x на 2.x, и вот что у меня было в 1.x. Заявитель также должен зарегистрировать сообщение в TestNG.
Это то, что у меня было раньше.
import org.apache.log4j.Layout;
import org.apache.log4j.spi.LoggingEvent;
import org.testng.Reporter;
public class TestNGAppender extends org.apache.log4j.ConsoleAppender {
public TestNGAppender() {
super();
return;
}
public TestNGAppender(Layout layout) {
super(layout);
return;
}
@Override
public void append(LoggingEvent logEvent) {
if (super.layout != null) {
Reporter.log(super.layout.format(logEvent));
}
return;
}
@Override
public void close() {
super.close();
return;
}
}
И вот как я добавляю это
public static <T> Logger getConsoleAndTestNGLogger(Class<T> aClass) {
Logger logger = Logger.getLogger(aClass);
PatternLayout patternLayout = new PatternLayout("%d %5p (%F:%L) %M - %m%n");
logger.addAppender(new TestNGAppender(patternLayout));
logger.addAppender(new ConsoleAppender(patternLayout));
return logger;
}
Я создал простой тест для этого и вот что он печатает
2019-03-20 10:14:03,329 INFO (LoggingUtilsTest.java:13) testGetConsoleAndTestNGLogger - Test
Теперь я перехожу на Log4j2.x, и это то, что я сделал до сих пор.
@Plugin(name = "TestNGAppender", category = Core.CATEGORY_NAME, elementType = Appender.ELEMENT_TYPE, printObject = true)
public class TestNGAppender extends AbstractAppender
{
public TestNGAppender(String name, Layout layout)
{
super(name, null, layout, false);
}
@Override
public void append(LogEvent logEvent)
{
final Layout<? extends Serializable> layout = getLayout();
if (layout != null && layout instanceof PatternLayout) {
Reporter.log(((PatternLayout) layout).toSerializable(logEvent));
} else {
Reporter.log(logEvent.getMessage().getFormattedMessage());
}
return;
}
@PluginFactory
public static TestNGAppender createAppender(
@PluginAttribute("name") @Required(message = "A name for the Appender must be specified") final String name,
@PluginElement("Layout") Layout<? extends Serializable> layout)
{
return new TestNGAppender(name, layout);
}
}
И
public static <T> Logger getConsoleAndTestNGLogger(Class<T> aClass)
{
PatternLayout patternLayout = PatternLayout.newBuilder().withPattern("[%p] (%t) %c: %m%n").build();
final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
Configuration config = ctx.getConfiguration();
ConsoleAppender consoleAppender = ConsoleAppender.createDefaultAppenderForLayout(patternLayout);
consoleAppender.start();
TestNGAppender appender = TestNGAppender.createAppender("TestNGAppender", patternLayout);
config.addAppender(consoleAppender);
config.addAppender(appender);
ctx.updateLoggers();
return LogManager.getLogger(aClass);
}
Но при запуске теста для печати чего-либо я ничего не вижу в отчете Console или TestNG.