[
https://issues.apache.org/jira/browse/LOG4J2-2519?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Ralph Goers closed LOG4J2-2519.
-------------------------------
Resolution: Workaround
> Does nio file appender exists?
> ------------------------------
>
> Key: LOG4J2-2519
> URL: https://issues.apache.org/jira/browse/LOG4J2-2519
> Project: Log4j 2
> Issue Type: Question
> Affects Versions: 2.10.0
> Reporter: David Kadleček
> Priority: Major
>
> In one of our production environments, the Thread which asynchronously
> processes log events ( Log4j2-TF-1-AsyncLogger) sometimes freezes (for
> several hours and never exits) in the native method
> FileOutputStream#writeBytes. The AsyncLogger is using RollingFileAppender,
> which is using old blocking IO access. Since we are unable to reproduce it
> anywhere else, we assume it's connected to this particular virtual
> environment setup.
>
> However, we would like to try NIO file appender. Unfortunately, I wasn't
> lucky to find any. Does any NIO file appender exist? Maybe unofficial? Is it
> planned to rewrite File appenders to use NIO approach when dealing with files?
>
> Bellow is a stacktrace of the async thread. It stays in the native method
> FileOutputStream.writeBytes forever but no new byte is written into the log
> folder.
>
> "Log4j2-TF-1-AsyncLogger[AsyncContext@1b9e1916]-1" #16 daemon prio=5
> os_prio=0 tid=0x00007f3c19409800 nid=0x1a3 runnable [0x00007f3bc434a000]
> java.lang.Thread.State: RUNNABLE
> at java.io.FileOutputStream.writeBytes([email protected]/Native Method)
> at java.io.FileOutputStream.write([email protected]/FileOutputStream.java:332)
> at
> java.io.BufferedOutputStream.write([email protected]/BufferedOutputStream.java:123)
> - locked <0x00000006c0c74498> (a java.io.BufferedOutputStream)
> at java.io.PrintStream.write([email protected]/PrintStream.java:480)
> - locked <0x00000006c0c74470> (a java.io.PrintStream)
> at
> org.apache.logging.log4j.core.util.CloseShieldOutputStream.write(CloseShieldOutputStream.java:53)
> at
> org.apache.logging.log4j.core.appender.OutputStreamManager.writeToDestination(OutputStreamManager.java:262)
> - eliminated <0x00000006c58e6240> (a
> org.apache.logging.log4j.core.appender.OutputStreamManager)
> at
> org.apache.logging.log4j.core.appender.OutputStreamManager.flushBuffer(OutputStreamManager.java:294)
> - eliminated <0x00000006c58e6240> (a
> org.apache.logging.log4j.core.appender.OutputStreamManager)
> at
> org.apache.logging.log4j.core.appender.OutputStreamManager.drain(OutputStreamManager.java:351)
> at
> org.apache.logging.log4j.core.layout.TextEncoderHelper.drainIfByteBufferFull(TextEncoderHelper.java:260)
> - locked <0x00000006c58e6240> (a
> org.apache.logging.log4j.core.appender.OutputStreamManager)
> at
> org.apache.logging.log4j.core.layout.TextEncoderHelper.writeAndEncodeAsMuchAsPossible(TextEncoderHelper.java:199)
> at
> org.apache.logging.log4j.core.layout.TextEncoderHelper.encodeChunkedText(TextEncoderHelper.java:159)
> - locked <0x00000006c58e6240> (a
> org.apache.logging.log4j.core.appender.OutputStreamManager)
> at
> org.apache.logging.log4j.core.layout.TextEncoderHelper.encodeText(TextEncoderHelper.java:58)
> at
> org.apache.logging.log4j.core.layout.StringBuilderEncoder.encode(StringBuilderEncoder.java:68)
> at
> org.apache.logging.log4j.core.layout.StringBuilderEncoder.encode(StringBuilderEncoder.java:32)
> at
> org.apache.logging.log4j.core.layout.PatternLayout.encode(PatternLayout.java:220)
> at
> org.apache.logging.log4j.core.layout.PatternLayout.encode(PatternLayout.java:58)
> at
> org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.directEncodeEvent(AbstractOutputStreamAppender.java:177)
> at
> org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.tryAppend(AbstractOutputStreamAppender.java:170)
> at
> org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.append(AbstractOutputStreamAppender.java:161)
> at
> org.apache.logging.log4j.core.config.AppenderControl.tryCallAppender(AppenderControl.java:156)
> at
> org.apache.logging.log4j.core.config.AppenderControl.callAppender0(AppenderControl.java:129)
> at
> org.apache.logging.log4j.core.config.AppenderControl.callAppenderPreventRecursion(AppenderControl.java:120)
> at
> org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:84)
> at
> org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LoggerConfig.java:448)
> at
> org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:433)
> at
> org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:417)
> at
> org.apache.logging.log4j.core.config.LoggerConfig.logParent(LoggerConfig.java:439)
> at
> org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:434)
> at
> org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:417)
> at
> org.apache.logging.log4j.core.config.LoggerConfig.logParent(LoggerConfig.java:439)
> at
> org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:434)
> at
> org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:417)
> at
> org.apache.logging.log4j.core.config.LoggerConfig.logParent(LoggerConfig.java:439)
> at
> org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:434)
> at
> org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:417)
> at
> org.apache.logging.log4j.core.config.AwaitCompletionReliabilityStrategy.log(AwaitCompletionReliabilityStrategy.java:79)
> at
> org.apache.logging.log4j.core.async.AsyncLogger.actualAsyncLog(AsyncLogger.java:380)
> at
> org.apache.logging.log4j.core.async.RingBufferLogEvent.execute(RingBufferLogEvent.java:152)
> at
> org.apache.logging.log4j.core.async.RingBufferLogEventHandler.onEvent(RingBufferLogEventHandler.java:45)
> at
> org.apache.logging.log4j.core.async.RingBufferLogEventHandler.onEvent(RingBufferLogEventHandler.java:29)
> at com.lmax.disruptor.BatchEventProcessor.run(BatchEventProcessor.java:129)
> at java.lang.Thread.run([email protected]/Thread.java:844)
> Locked ownable synchronizers:
> - None
--
This message was sent by Atlassian Jira
(v8.3.4#803005)