[ https://issues.apache.org/jira/browse/LOG4J2-2067?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16205052#comment-16205052 ]
Paul Burrowes commented on LOG4J2-2067: --------------------------------------- {code} diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/PatternSelectorTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/PatternSelectorTest.java index c1df3f815..1d0f6f818 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/PatternSelectorTest.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/PatternSelectorTest.java @@ -100,4 +100,21 @@ public class PatternSelectorTest { assertEquals("[INFO ] JavascriptNoLocation No location information" + Strings.LINE_SEPARATOR, messages.get(2)); app.clear(); } + + @Test + public void testPatternSelectorWithHeader() throws Exception { + final org.apache.logging.log4j.Logger logger = LogManager.getLogger("TestPatternSelectorWithHeader"); + logger.traceEntry(); + logger.info("Hello World"); + logger.traceExit(); + final ListAppender app = (ListAppender) context.getRequiredAppender("List4"); + final List<String> messages = app.getMessages(); + assertNotNull("No Messages", messages); + assertTrue("Incorrect number of messages. Expected 4, Actual " + messages.size() + ": " + messages, messages.size() == 4); + assertEquals("Some header text\n", messages.get(0)); + final String expect = String.format("[TRACE] TestPatternSelectorWithHeader ====== " + + "o.a.l.l.c.PatternSelectorTest.testPatternSelectorWithHeader:107 Enter ======%n"); + assertEquals(expect, messages.get(1)); + app.clear(); + } } diff --git a/log4j-core/src/test/resources/log4j-patternSelector.xml b/log4j-core/src/test/resources/log4j-patternSelector.xml index 76bc8bdbe..332f8daac 100644 --- a/log4j-core/src/test/resources/log4j-patternSelector.xml +++ b/log4j-core/src/test/resources/log4j-patternSelector.xml @@ -59,6 +59,14 @@ </ScriptPatternSelector> </PatternLayout> </List> + <List name="List4"> + <PatternLayout header="Some header text%n"> + <MarkerPatternSelector defaultPattern="[%-5level] %c{1.} %msg%n"> + <PatternMatch key="FLOW" pattern="[%-5level] %c{1.} ====== %C{1.}.%M:%L %msg ======%n"/> + </MarkerPatternSelector> + </PatternLayout> + <SizeBasedTriggeringPolicy size="10MB"/> + </List> </Appenders> <Loggers> <Logger name="TestJavaScriptPatternSelector" level="trace" additivity="false"> @@ -73,6 +81,9 @@ <Logger name="NoLocation" level="trace" additivity="false"> <AppenderRef ref="List2"/> </Logger> + <Logger name="TestPatternSelectorWithHeader" level="trace" additivity="false"> + <AppenderRef ref="List4"/> + </Logger> <Root level="trace"> <AppenderRef ref="List" /> </Root> {code} > Using PatternSelectors breaks header printing in PatternLayout > -------------------------------------------------------------- > > Key: LOG4J2-2067 > URL: https://issues.apache.org/jira/browse/LOG4J2-2067 > Project: Log4j 2 > Issue Type: Bug > Components: Layouts, Pattern Converters > Affects Versions: 2.8.2, 2.9.0 > Reporter: Paul Burrowes > > Using a config of > {code} > <?xml version="1.0" ?> > <Configuration name="LOG4j2-1964 demo" status="ERROR"> > <Appenders> > <Console name="consoleLog" target="SYSTEM_ERR"> > <PatternLayout pattern="%msg{nolookups}%n%throwable{none}"/> > </Console> > <RollingFile name="fooAppender" fileName="foo.log" > filePattern="foo.log.%i"> > <PatternLayout header="log file started%n"> > <MarkerPatternSelector defaultPattern="%d{yyyy-MM-dd HH:mm:ss.SSSZ} > %msg{nolookups}%n"> > <PatternMatch key="Trace" pattern="%d{yyyy-MM-dd HH:mm:ss.SSSZ} > TRACER %msg{nolookups}%n"/> > </MarkerPatternSelector> > </PatternLayout> > <SizeBasedTriggeringPolicy size="10MB"/> > </RollingFile> > </Appenders> > <Loggers> > <Root level="INFO"> > <AppenderRef ref="consoleLog"/> > <AppenderRef ref="fooAppender"/> > </Root> > </Loggers> > </Configuration> > {code} > the header is expected to be formatted according to the pattern configured > but instead the output is > {code} > 2017-10-09 14:25:12.072+1300 > 2017-10-09 14:25:12.143+1300 using interpolation and a throwable > java.lang.NullPointerException > java.lang.NullPointerException: null > at leliel.Main.main(Main.java:51) [Log4j2-testing/:?] > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > ~[?:1.7.0_79] > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) > ~[?:1.7.0_79] > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > ~[?:1.7.0_79] > at java.lang.reflect.Method.invoke(Method.java:606) ~[?:1.7.0_79] > at > com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) > [idea_rt.jar:?] > 2017-10-09 14:25:12.151+1300 throwable only > {code} > The fix appears to simply be to not provide the PatternSelector to the header > and footer Serializer builders. > {code} > diff --git > a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java > > b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java > index e4440eb9b..39042081f 100644 > --- > a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java > +++ > b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java > @@ -108,7 +108,7 @@ public final class PatternLayout extends > AbstractStringLayout { > newSerializerBuilder() > .setConfiguration(config) > .setReplace(replace) > - .setPatternSelector(patternSelector) > + .setPatternSelector(null) > .setAlwaysWriteExceptions(alwaysWriteExceptions) > .setDisableAnsi(disableAnsi) > .setNoConsoleNoAnsi(noConsoleNoAnsi) > @@ -117,7 +117,7 @@ public final class PatternLayout extends > AbstractStringLayout { > newSerializerBuilder() > .setConfiguration(config) > .setReplace(replace) > - .setPatternSelector(patternSelector) > + .setPatternSelector(null) > .setAlwaysWriteExceptions(alwaysWriteExceptions) > .setDisableAnsi(disableAnsi) > .setNoConsoleNoAnsi(noConsoleNoAnsi) > {code} -- This message was sent by Atlassian JIRA (v6.4.14#64029)