Paul Burrowes created LOG4J2-2067:
-------------------------------------

             Summary: 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.9.0, 2.8.2
            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)

Reply via email to