logging-log4j-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Remko Popma (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (LOG4J2-336) AsyncLogger.log fail with NullPointerException after double reconfigure
Date Thu, 08 Aug 2013 01:23:47 GMT

    [ https://issues.apache.org/jira/browse/LOG4J2-336?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13733030#comment-13733030
] 

Remko Popma commented on LOG4J2-336:
------------------------------------

Thanks for finding this. 

On reconfiguration, a new Disruptor instance is created, but no new thread pool is created.
The new Disruptor instances references the old thread pool, which has been shut down (or is
in the middle of shutting down), resulting in various errors. The solution is to create a
new thread pool object every time a new Disruptor instance is created.
                
> 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-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org


Mime
View raw message