Anthony Baldocchi created LOG4J2-471:
----------------------------------------
Summary: toString methods that perform logging can deadlock
AsyncLogger
Key: LOG4J2-471
URL: https://issues.apache.org/jira/browse/LOG4J2-471
Project: Log4j 2
Issue Type: Bug
Components: Core
Affects Versions: 2.0-beta9
Environment: Debian Squeeze
Java 7u25
Reporter: Anthony Baldocchi
The AsyncLogger thread is the only consumer of a Disruptor RingBuffer which
contains log events ostensibly produced by a number of other threads. However,
when AsyncLogger generates a log message, it has to call toString() on objects
which can potentially also perform logging internally. This results in a
situation when the RingBuffer is nearly full whereby AsyncLogger has pulled an
event from the RingBuffer, calls toString() on the associated objects, which
call AsyncLogger.log which attempts to publish an event into a full buffer,
which will park repeatedly without hope of ever leaving the loop. Relevant
stack trace is:
"AsyncLogger-1" daemon prio=10 tid=0x00007f7a705a8000 nid=0x3d73 runnable
[0x00007f7a740d1000]
java.lang.Thread.State: TIMED_WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
at
java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:349)
at
com.lmax.disruptor.MultiProducerSequencer.next(MultiProducerSequencer.java:133)
at
com.lmax.disruptor.MultiProducerSequencer.next(MultiProducerSequencer.java:102)
at com.lmax.disruptor.RingBuffer.publishEvent(RingBuffer.java:391)
at com.lmax.disruptor.dsl.Disruptor.publishEvent(Disruptor.java:219)
at
org.apache.logging.log4j.core.async.AsyncLogger.log(AsyncLogger.java:214)
at
org.apache.logging.log4j.spi.AbstractLoggerWrapper.log(AbstractLoggerWrapper.java:55)
at org.slf4j.impl.SLF4JLogger.debug(SLF4JLogger.java:138)
at org.somepackage.SomeException.toString (SomeException.java:32)
at java.lang.String.valueOf(String.java:2854)
at java.io.PrintWriter.println(PrintWriter.java:754)
at java.lang.Throwable$WrappedPrintWriter.println(Throwable.java:763)
at java.lang.Throwable.printStackTrace(Throwable.java:654)
- locked <0x00000000cb2f6380> (a java.io.PrintWriter)
at java.lang.Throwable.printStackTrace(Throwable.java:720)
at
org.apache.logging.log4j.core.pattern.ThrowablePatternConverter.formatOption(ThrowablePatternConverter.java:138)
at
org.apache.logging.log4j.core.pattern.ThrowablePatternConverter.format(ThrowablePatternConverter.java:80)
at
org.apache.logging.log4j.core.pattern.ExtendedThrowablePatternConverter.format(ExtendedThrowablePatternConverter.java:69)
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.config.LoggerConfig.log(LoggerConfig.java:406)
at
org.apache.logging.log4j.core.Logger$PrivateConfig.logEvent(Logger.java:273)
at
org.apache.logging.log4j.core.async.AsyncLogger.actualAsyncLog(AsyncLogger.java:230)
at
org.apache.logging.log4j.core.async.RingBufferLogEvent.execute(RingBufferLogEvent.java:98)
at
org.apache.logging.log4j.core.async.RingBufferLogEventHandler.onEvent(RingBufferLogEventHandler.java:43)
at
org.apache.logging.log4j.core.async.RingBufferLogEventHandler.onEvent(RingBufferLogEventHandler.java:28)
at
com.lmax.disruptor.BatchEventProcessor.run(BatchEventProcessor.java:133)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
--
This message was sent by Atlassian JIRA
(v6.1.4#6159)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]