[ https://issues.apache.org/jira/browse/LOG4J2-336?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Remko Popma updated LOG4J2-336: ------------------------------- 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: {code} <?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> {code} The following Java class did NOT bring up the error, instead it threw a different exception (stack trace below): {code} 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!"); } } {code} ---- 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) was: 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) > AsyncLogger.log fail with NullPointerException after double reconfigure > ----------------------------------------------------------------------- > > Key: LOG4J2-336 > URL: https://issues.apache.org/jira/browse/LOG4J2-336 > Project: Log4j 2 > Issue Type: Bug > Components: Core > Affects Versions: 2.0-beta8 > Environment: LUbuntu 13.04, OpenJDK 7 > Reporter: Andre Bogus > > 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: > {code} > <?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> > {code} > The following Java class did NOT bring up the error, instead it threw a > different exception (stack trace below): > {code} > 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!"); > } > } > {code} > ---- > 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) -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe, e-mail: log4j-dev-unsubscr...@logging.apache.org For additional commands, e-mail: log4j-dev-h...@logging.apache.org