Log4j 2
  1. Log4j 2
  2. LOG4J2-462

LevelPatternConverter.format may throw NPE

    Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 2.0-beta9
    • Fix Version/s: 2.0-rc1, 2.0
    • Component/s: Core
    • Labels:
      None
    • Environment:

      java version "1.6.0_65"
      Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609)
      Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode)

      Description

      I found an issue when enabling asynchronous appenders with `-DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector` and I also got a workaround to fix it.

      Note that I invoke LogContext.setConfigLocation() then LogContext.reconfigure() in order to apply log4j2.xml programatically.

      1. Stacktrace ... See the bottom of the Description as it is a large portion.
      2. Workaround
      Just to get rid of toString() at line 123 from the following snippet:

      2.0-beta-9.org.apache.logging.log4j.core.pattern.LevelPatternConverter.java
      122 public void format(final LogEvent event, final StringBuilder output) {
      123     output.append(levelMap == null ? event.getLevel().toString() : levelMap.get(event.getLevel()));
      124 }
      

      The workaround is as follows:

      MyWorkaround
      122 public void format(final LogEvent event, final StringBuilder output) {
      123     output.append(levelMap == null ? event.getLevel() : levelMap.get(event.getLevel()));
      124 }
      

      3. Log4j2.xml

      log4j2.xml snip
      		<RollingRandomAccessFile name="MySizeRollingLog"
      			fileName="foo.log"
      			filePattern="foo-%d{MM-dd-yyyy}-%i.log.gz">
      			<PatternLayout
      				pattern="%d{yyyy-MM-dd HH:mm:ss,SSS z} %-5p [%t] (%F:%L) - [server($${sys:something})]-[%X{Something}]-%m%n" />
      			<Policies>
      				<TimeBasedTriggeringPolicy interval="1"
      					modulate="true" />
      				<SizeBasedTriggeringPolicy size="1000KB" />
      			</Policies>
      			<DefaultRolloverStrategy max="3" />
      		</RollingRandomAccessFile>
      

      I'm not sure why event.getLevel() was null but the workaround works for me.


      Full stacktrace:
      2013-12-05 09:36:58,947 ERROR An exception occurred processing Appender MySizeRollingLog java.lang.NullPointerException
      at org.apache.logging.log4j.core.pattern.LevelPatternConverter.format(LevelPatternConverter.java:122)
      at org.apache.logging.log4j.core.pattern.PatternFormatter.format(PatternFormatter.java:36)
      at org.apache.logging.log4j.core.layout.PatternLayout.toSerializable(PatternLayout.java:167)
      at org.apache.logging.log4j.core.layout.PatternLayout.toSerializable(PatternLayout.java:52)
      at org.apache.logging.log4j.core.layout.AbstractStringLayout.toByteArray(AbstractStringLayout.java:45)
      at org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.append(AbstractOutputStreamAppender.java:111)
      at org.apache.logging.log4j.core.appender.RollingRandomAccessFileAppender.append(RollingRandomAccessFileAppender.java:96)
      at org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:99)
      at org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LoggerConfig.java:425)
      at org.apache.logging.log4j.core.async.AsyncLoggerConfig.asyncCallAppenders(AsyncLoggerConfig.java:116)
      at org.apache.logging.log4j.core.async.AsyncLoggerConfigHelper$Log4jEventWrapperHandler.onEvent(AsyncLoggerConfigHelper.java:218)
      at org.apache.logging.log4j.core.async.AsyncLoggerConfigHelper$Log4jEventWrapperHandler.onEvent(AsyncLoggerConfigHelper.java:203)
      at com.lmax.disruptor.BatchEventProcessor.run(BatchEventProcessor.java:133)
      at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
      at java.lang.Thread.run(Thread.java:695)

        Issue Links

          Activity

          Daisuke Baba created issue -
          Remko Popma made changes -
          Field Original Value New Value
          Assignee Remko Popma [ remkop@yahoo.com ]
          Remko Popma made changes -
          Status Open [ 1 ] In Progress [ 3 ]
          Remko Popma made changes -
          Status In Progress [ 3 ] Resolved [ 5 ]
          Fix Version/s 2.0-rc1 [ 12325011 ]
          Fix Version/s 2.0 [ 12324757 ]
          Resolution Fixed [ 1 ]
          Remko Popma made changes -
          Link This issue relates to LOG4J2-465 [ LOG4J2-465 ]

            People

            • Assignee:
              Remko Popma
              Reporter:
              Daisuke Baba
            • Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development