[
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: [email protected]
For additional commands, e-mail: [email protected]