[
https://issues.apache.org/jira/browse/LOG4J2-2720?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16977259#comment-16977259
]
Adwait Kumar Singh commented on LOG4J2-2720:
--------------------------------------------
[~rgoers] I was partially able to root cause, the issue is the TestAppender
that I am creating in `@BeforeClass` in the unit test and the TestAppender used
by the logger is different. But this is happening only after upgrade to 2.11.
I am setting up the TestAppender like this.
{code:java}
LoggerContext context = LoggerContext.getContext(false);
final Configuration config = context.getConfiguration();
var testAppender = (TestAppender) config.getAppenders().get("TestAppender");
testAppender.clearAppender();
return testAppender;
{code:java}
> TestAppender based on MutableLogEvent stop working in Log4j2.11
> ---------------------------------------------------------------
>
> Key: LOG4J2-2720
> URL: https://issues.apache.org/jira/browse/LOG4J2-2720
> Project: Log4j 2
> Issue Type: Question
> Affects Versions: 2.11.2
> Environment: JDK 11, Log4J-2.11.2
> Reporter: Adwait Kumar Singh
> Priority: Critical
> Fix For: 2.8
>
>
> I have written unit tests on Logs by creating a custom appender
> After moving to Log4j2.11, I am seeing that the getMessages is returning
> empty after I am logging something. I attached a debugger and can see that
> the append() method is being invoked and the message list is getting
> populated, however at the time of verififcation it is magically vanishing
> off. Reverting back to 2.8 fixes this.
> {code:java}
> import java.io.Serializable;
> import java.util.ArrayList;
> import java.util.List;
> import org.apache.logging.log4j.core.Filter;
> import org.apache.logging.log4j.core.Layout;
> import org.apache.logging.log4j.core.LogEvent;
> import org.apache.logging.log4j.core.appender.AbstractAppender;
> import org.apache.logging.log4j.core.config.plugins.Plugin;
> import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
> import org.apache.logging.log4j.core.config.plugins.PluginElement;
> import org.apache.logging.log4j.core.config.plugins.PluginFactory;
> import org.apache.logging.log4j.core.impl.MutableLogEvent;
> import org.apache.logging.log4j.core.layout.PatternLayout;
> @Plugin(name = "TestAppender", category = "Core", elementType = "appender",
> printObject = true)
> public class TestAppender extends AbstractAppender {
> private List<String> messages = new ArrayList<>();
> TestAppender(String name, Filter filter, Layout<? extends Serializable>
> layout) {
> super(name, filter, layout);
> }
> @Override public void append(LogEvent event) {
> getMessages().add(((MutableLogEvent) (event)).getFormattedMessage());
> }
> @PluginFactory public static TestAppender createAppender(
> @PluginAttribute("name") String name,
> @PluginElement("Layout") Layout<? extends Serializable> layout,
> @PluginElement("Filter") final Filter filter,
> @PluginAttribute("otherAttribute") String otherAttribute) {
> if (name == null) {
> LOGGER.error("No name provided for TestAppender");
> return null;
> }
> if (layout == null) {
> layout = PatternLayout.createDefaultLayout();
> }
> return new TestAppender(name, filter, layout);
> }
> public List<String> getMessages() {
> return messages;
> }
> public void clearAppender() {
> this.messages = new ArrayList<>();
> }
> }{code}
> Test log configuration file
> {code:xml}
> <?xml version="1.0" encoding="UTF-8"?>
> <Configuration status="WARN" packages="com.sample.package.test.utils">
> <Properties>
> <Property name="log-path">${sys:root}/var/output/logs</Property>
> </Properties>
> <Appenders>
> <Console name="Console" target="SYSTEM_OUT">
> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} -
> %msg%n"/>
> </Console>
> <TestAppender name="TestAppender">
> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} -
> %msg%n"/>
> </TestAppender>
> </Appenders>
> <Loggers>
> <Logger name="com.amazon.sample.package" level="ALL"/>
> <Root>
> <AppenderRef ref="TestAppender" level="ALL"/>
> </Root>
> </Loggers>
> </Configuration>
> {code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)