Uploaded image for project: 'Log4j 2'
  1. Log4j 2
  2. LOG4J2-336

AsyncLogger.log fail with NullPointerException after double reconfigure

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 2.0-beta8
    • 2.0-beta9
    • Core
    • None
    • LUbuntu 13.04, OpenJDK 7

    Description

      Using reconfigure() to select log files at runtime.
      After the second reconfigure, the next log fails with a NullPointerException in org.apache.logging.log4j.core.async.AsyncLoggerConfigHelper:253

      It appears that the disruptor has been nulled and not been brought back up by the second reconfigure().

      Trying to get a minimal test case I came up with the following log4j2.xml:

      <?xml version="1.0" encoding="UTF-8" ?>
      <configuration status="debug">
        <appenders>
          <Console name="console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d\{ABSOLUTE\} %6p %c %x - %m%n"/>
          </Console>
        </appenders>
        <loggers>
          <asyncroot level="WARN">
            <appender-ref ref="console" />
          </asyncroot>
        </loggers>
      </configuration>
      

      The following Java class did NOT bring up the error, instead it threw a different exception (stack trace below):

      import org.apache.logging.log4j.LogManager;
      import org.apache.logging.log4j.Logger;
      import org.apache.logging.log4j.core.LoggerContext;
      
      public class Log4jAsyncReconfTest {
          private static final Logger log = LogManager.getLogger(Log4jAsyncReconfTest.class);
          public static void main(String[] args) throws InterruptedException {
              System.out.println("test");
              LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
              ctx.reconfigure();
              ctx.reconfigure();
              log.warn("Danger!");
          }
      }
      

      throws:

      java.util.concurrent.RejectedExecutionException: Task com.lmax.disruptor.BatchEventProcessor@7ea4461e rejected from java.util.concurrent.ThreadPoolExecutor@52f79c86[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 1]
      at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2048)
      at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:821)
      at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1372)
      at java.util.concurrent.Executors$DelegatedExecutorService.execute(Executors.java:628)
      at com.lmax.disruptor.dsl.EventProcessorInfo.start(EventProcessorInfo.java:77)
      at com.lmax.disruptor.dsl.Disruptor.start(Disruptor.java:263)
      at org.apache.logging.log4j.core.async.AsyncLoggerConfigHelper.initDisruptor(AsyncLoggerConfigHelper.java:119)

      Attachments

        Activity

          People

            rpopma Remko Popma
            llogiq Andre Bogus
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: