[
https://issues.apache.org/jira/browse/LOG4J2-1182?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16964822#comment-16964822
]
Dmitry edited comment on LOG4J2-1182 at 11/1/19 1:23 PM:
---------------------------------------------------------
I'm using the version 2.12 and had the same exception with RollingFileAppender
which has happened at the time of rolling.
{noformat}
2019-11-01 16:05:02,235 THREAD ERROR Recovering from
StringBuilderEncoder.encode('2019-11-01 16:05:02,235 DEBUG |THREAD| LOGGERNAME:
MESSAGE') error:
org.apache.logging.log4j.core.appender.AppenderLoggingException: Error writing
to stream /C:/some/path/to/logs/data.log
org.apache.logging.log4j.core.appender.AppenderLoggingException: Error writing
to stream /C:/some/path/to/logs/data.log2019-11-01 16:05:02,235 THREAD ERROR
Recovering from StringBuilderEncoder.encode('2019-11-01 16:05:02,235 DEBUG
|THREAD| LOGGERNAME: MESSAGE') error:
org.apache.logging.log4j.core.appender.AppenderLoggingException: Error writing
to stream /C:/some/path/to/logs/data.log
org.apache.logging.log4j.core.appender.AppenderLoggingException: Error writing
to stream /C:/some/path/to/logs/data.log
at
org.apache.logging.log4j.core.appender.OutputStreamManager.writeToDestination(OutputStreamManager.java:263)
at
org.apache.logging.log4j.core.appender.FileManager.writeToDestination(FileManager.java:272)
at
org.apache.logging.log4j.core.appender.rolling.RollingFileManager.writeToDestination(RollingFileManager.java:236)
at
org.apache.logging.log4j.core.appender.OutputStreamManager.flushBuffer(OutputStreamManager.java:293)
at
org.apache.logging.log4j.core.appender.OutputStreamManager.drain(OutputStreamManager.java:350)
at
org.apache.logging.log4j.core.layout.ByteBufferDestinationHelper.writeToUnsynchronized(ByteBufferDestinationHelper.java:45)
at
org.apache.logging.log4j.core.appender.OutputStreamManager.writeBytes(OutputStreamManager.java:360)
at
org.apache.logging.log4j.core.layout.TextEncoderHelper.writeEncodedText(TextEncoderHelper.java:96)
at
org.apache.logging.log4j.core.layout.TextEncoderHelper.encodeText(TextEncoderHelper.java:65)
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:227)
at
org.apache.logging.log4j.core.layout.PatternLayout.encode(PatternLayout.java:59)
at
org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.directEncodeEvent(AbstractOutputStreamAppender.java:197)
at
org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.tryAppend(AbstractOutputStreamAppender.java:190)
at
org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.append(AbstractOutputStreamAppender.java:181)
at
org.apache.logging.log4j.core.appender.RollingFileAppender.append(RollingFileAppender.java:312)
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:543)
at
org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:502)
at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:485)
at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:412)
at
org.apache.logging.log4j.core.config.AwaitCompletionReliabilityStrategy.log(AwaitCompletionReliabilityStrategy.java:63)
at org.apache.logging.log4j.core.Logger.logMessage(Logger.java:154)
at
org.apache.logging.log4j.spi.ExtendedLoggerWrapper.logMessage(ExtendedLoggerWrapper.java:222)
at org.apache.logging.log4j.spi.AbstractLogger.log(AbstractLogger.java:2102)
at
org.apache.logging.log4j.spi.AbstractLogger.tryLogMessage(AbstractLogger.java:2190)
at
org.apache.logging.log4j.spi.AbstractLogger.logMessageTrackRecursion(AbstractLogger.java:2144)
at
org.apache.logging.log4j.spi.AbstractLogger.logMessageSafely(AbstractLogger.java:2127)
at
org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:1828)
at
org.apache.ibatis.logging.log4j2.Log4j2AbstractLoggerImpl.debug(Log4j2AbstractLoggerImpl.java:64)
at org.apache.ibatis.logging.log4j2.Log4j2Impl.debug(Log4j2Impl.java:62)
...
Caused by: java.io.IOException: Stream Closed
at java.io.FileOutputStream.writeBytes(Native Method)
at java.io.FileOutputStream.write(FileOutputStream.java:326)
at
org.apache.logging.log4j.core.appender.OutputStreamManager.writeToDestination(OutputStreamManager.java:261)
... 111 more{noformat}
In our project we doesn't have a default log4j configuration as far as we need
to specify logs directory at runtime. At the time of application start we get
the parameter with path to logs directory, we initializing MainMapLookup
through setMainArguments and configuring log4j through Configurator.initialize.
Our configuration:
{code:java}
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="DEBUG"
xmlns="http://logging.apache.org/log4j/2.0/config">
<Properties>
<Property name="logsDir" value="${main:applicationWorkDirUri}/logs" />
<Property name="pattern" value="%date %-5level |%thread| %logger:
%message%n" />
</Properties> <Appenders>
<RollingFile name="DataFile" fileName="${logsDir}/data.log"
filePattern="${logsDir}/data-%i.log">
<PatternLayout pattern="${pattern}" charset="UTF-8" />
<Policies>
<SizeBasedTriggeringPolicy size="10 MB"/>
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="logger.name" level="DEBUG" additivity="false">
<AppenderRef ref="DataFile" />
</Logger>
</Loggers>
</Configuration>
{code}
Logs being written ok until appender hits the log size limit. Appender moving
contents of the log into data-1.log and creates data.log. But after it happends
data.log stays empty until next application start.
At the end i was found that the path to logs directory which was passed to
MainMapLookup as "applicationWorkDirUri" was received from URI.getPath and was
starting from '/' so it was like '/C:/some/path/to/logs'. Removing that slash
fixed the error.
It would be great to if RollingAppender will be able to handle that sort of
paths as it doing until the rolling is needed.
was (Author: gr1ver):
I'm using the version 2.12 and had the same exception with RollingFileAppender
which has happened at the time of rolling.
{noformat}
2019-11-01 16:05:02,235 THREAD ERROR Recovering from
StringBuilderEncoder.encode('2019-11-01 16:05:02,235 DEBUG |THREAD| LOGGERNAME:
MESSAGE') error:
org.apache.logging.log4j.core.appender.AppenderLoggingException: Error writing
to stream /C:/some/path/to/logs/data.log
org.apache.logging.log4j.core.appender.AppenderLoggingException: Error writing
to stream /C:/some/path/to/logs/data.log2019-11-01 16:05:02,235 THREAD ERROR
Recovering from StringBuilderEncoder.encode('2019-11-01 16:05:02,235 DEBUG
|THREAD| LOGGERNAME: MESSAGE') error:
org.apache.logging.log4j.core.appender.AppenderLoggingException: Error writing
to stream /C:/some/path/to/logs/data.log
org.apache.logging.log4j.core.appender.AppenderLoggingException: Error writing
to stream /C:/some/path/to/logs/data.log
at
org.apache.logging.log4j.core.appender.OutputStreamManager.writeToDestination(OutputStreamManager.java:263)
at
org.apache.logging.log4j.core.appender.FileManager.writeToDestination(FileManager.java:272)
at
org.apache.logging.log4j.core.appender.rolling.RollingFileManager.writeToDestination(RollingFileManager.java:236)
at
org.apache.logging.log4j.core.appender.OutputStreamManager.flushBuffer(OutputStreamManager.java:293)
at
org.apache.logging.log4j.core.appender.OutputStreamManager.drain(OutputStreamManager.java:350)
at
org.apache.logging.log4j.core.layout.ByteBufferDestinationHelper.writeToUnsynchronized(ByteBufferDestinationHelper.java:45)
at
org.apache.logging.log4j.core.appender.OutputStreamManager.writeBytes(OutputStreamManager.java:360)
at
org.apache.logging.log4j.core.layout.TextEncoderHelper.writeEncodedText(TextEncoderHelper.java:96)
at
org.apache.logging.log4j.core.layout.TextEncoderHelper.encodeText(TextEncoderHelper.java:65)
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:227)
at
org.apache.logging.log4j.core.layout.PatternLayout.encode(PatternLayout.java:59)
at
org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.directEncodeEvent(AbstractOutputStreamAppender.java:197)
at
org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.tryAppend(AbstractOutputStreamAppender.java:190)
at
org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.append(AbstractOutputStreamAppender.java:181)
at
org.apache.logging.log4j.core.appender.RollingFileAppender.append(RollingFileAppender.java:312)
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:543)
at
org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:502)
at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:485)
at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:412)
at
org.apache.logging.log4j.core.config.AwaitCompletionReliabilityStrategy.log(AwaitCompletionReliabilityStrategy.java:63)
at org.apache.logging.log4j.core.Logger.logMessage(Logger.java:154)
at
org.apache.logging.log4j.spi.ExtendedLoggerWrapper.logMessage(ExtendedLoggerWrapper.java:222)
at org.apache.logging.log4j.spi.AbstractLogger.log(AbstractLogger.java:2102)
at
org.apache.logging.log4j.spi.AbstractLogger.tryLogMessage(AbstractLogger.java:2190)
at
org.apache.logging.log4j.spi.AbstractLogger.logMessageTrackRecursion(AbstractLogger.java:2144)
at
org.apache.logging.log4j.spi.AbstractLogger.logMessageSafely(AbstractLogger.java:2127)
at
org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:1828)
at
org.apache.ibatis.logging.log4j2.Log4j2AbstractLoggerImpl.debug(Log4j2AbstractLoggerImpl.java:64)
at org.apache.ibatis.logging.log4j2.Log4j2Impl.debug(Log4j2Impl.java:62)
...
Caused by: java.io.IOException: Stream Closed
at java.io.FileOutputStream.writeBytes(Native Method)
at java.io.FileOutputStream.write(FileOutputStream.java:326)
at
org.apache.logging.log4j.core.appender.OutputStreamManager.writeToDestination(OutputStreamManager.java:261)
... 111 more{noformat}
In our project we doesn't have a default log4j configuration as far as we need
to specify logs directory at runtime. At the time of application start we get
the parameter with path to logs directory, we initializing MainMapLookup
through setMainArguments and configuring log4j through Configurator.initialize.
Our configuration:
{code:java}
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="DEBUG"
xmlns="http://logging.apache.org/log4j/2.0/config">
<Properties>
<Property name="logsDir" value="${main:applicationWorkDirUri}/logs" />
<Property name="pattern" value="%date %-5level |%thread| %logger:
%message%n" />
</Properties> <Appenders>
<RollingFile name="DataFile" fileName="${logsDir}/data.log"
filePattern="${logsDir}/data-%i.log">
<PatternLayout pattern="${pattern}" charset="UTF-8" />
<Policies>
<SizeBasedTriggeringPolicy size="10 MB"/>
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="logger.name" level="DEBUG" additivity="false">
<AppenderRef ref="DataFile" />
</Logger>
</Loggers>
</Configuration>
{code}
Logs being written ok until appender hits the log size limit. Appender moving
contents of the log into data-1.log and creates data.log. But after it happends
data.log stays empty until next application start.
At the end i was found that the path to logs directory which was passed to
MainMapLookup as "applicationWorkDirUri" was received from URI.getPath and was
starting from '/' so it was like '/C:/some/path/to/logs'. Removing that slash
fixed the error.
It would be great to if RollingAppender will be able to handle that sort of
paths as it doing until the rolling is needed.
> RandomAccessFile IOException: Stream Closed is back
> ---------------------------------------------------
>
> Key: LOG4J2-1182
> URL: https://issues.apache.org/jira/browse/LOG4J2-1182
> Project: Log4j 2
> Issue Type: Bug
> Components: Appenders
> Affects Versions: 2.4.1
> Environment: Java 1.8.0_60-b27, OSX 10.11, Jackson 2.6.1, Maven 3.3.3
> Reporter: Ravi Gairola
> Priority: Minor
> Labels: Rollover
>
> This error pops up every now and then and looks very similar to LOG4J2-636:
> {code:java}
> 2015-10-27-23:00:00 2015-10-27 16:00:00,038 scribe-EventScribe ERROR Unable
> to write to stream logs/server.log for appender AppLog
> 2015-10-27-23:00:00 2015-10-27 16:00:00,038 scribe-EventScribe ERROR An
> exception occurred processing Appender AppLog
> org.apache.logging.log4j.core.appender.AppenderLoggingException: Error
> writing to RandomAccessFile logs/server.log
> 2015-10-27-23:00:00 at
> org.apache.logging.log4j.core.appender.rolling.RollingRandomAccessFileManager.flush(RollingRandomAccessFileManager.java:132)
> 2015-10-27-23:00:00 at
> org.apache.logging.log4j.core.appender.rolling.RollingRandomAccessFileManager.write(RollingRandomAccessFileManager.java:112)
> 2015-10-27-23:00:00 at
> org.apache.logging.log4j.core.appender.OutputStreamManager.write(OutputStreamManager.java:136)
> 2015-10-27-23:00:00 at
> org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.append(AbstractOutputStreamAppender.java:105)
> 2015-10-27-23:00:00 at
> org.apache.logging.log4j.core.appender.RollingRandomAccessFileAppender.append(RollingRandomAccessFileAppender.java:98)
> 2015-10-27-23:00:00 at
> org.apache.logging.log4j.core.config.AppenderControl.tryCallAppender(AppenderControl.java:152)
> 2015-10-27-23:00:00 at
> org.apache.logging.log4j.core.config.AppenderControl.callAppender0(AppenderControl.java:125)
> 2015-10-27-23:00:00 at
> org.apache.logging.log4j.core.config.AppenderControl.callAppenderPreventRecursion(AppenderControl.java:116)
> 2015-10-27-23:00:00 at
> org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:84)
> 2015-10-27-23:00:00 at
> org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LoggerConfig.java:390)
> 2015-10-27-23:00:00 at
> org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:378)
> 2015-10-27-23:00:00 at
> org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:362)
> 2015-10-27-23:00:00 at
> org.apache.logging.log4j.core.config.LoggerConfig.logParent(LoggerConfig.java:384)
> 2015-10-27-23:00:00 at
> org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:379)
> 2015-10-27-23:00:00 at
> org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:362)
> 2015-10-27-23:00:00 at
> org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:352)
> 2015-10-27-23:00:00 at
> org.apache.logging.log4j.core.config.AwaitCompletionReliabilityStrategy.log(AwaitCompletionReliabilityStrategy.java:63)
> 2015-10-27-23:00:00 at
> org.apache.logging.log4j.core.Logger.logMessage(Logger.java:143)
> 2015-10-27-23:00:00 at
> org.apache.logging.log4j.spi.AbstractLogger.logMessage(AbstractLogger.java:1011)
> 2015-10-27-23:00:00 at
> org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:988)
> 2015-10-27-23:00:00 at
> org.apache.logging.slf4j.Log4jLogger.error(Log4jLogger.java:318)
> 2015-10-27-23:00:00 at
> com.nextbit.syncserver.common.EventScribe$Scribe.run(EventScribe.java:142)
> 2015-10-27-23:00:00 Caused by: java.io.IOException: Stream Closed
> 2015-10-27-23:00:00 at java.io.RandomAccessFile.writeBytes(Native Method)
> 2015-10-27-23:00:00 at
> java.io.RandomAccessFile.write(RandomAccessFile.java:525)
> 2015-10-27-23:00:00 at
> org.apache.logging.log4j.core.appender.rolling.RollingRandomAccessFileManager.flush(RollingRandomAccessFileManager.java:129)
> 2015-10-27-23:00:00 ... 21 more
> {code}
> Here's the respective yaml configuration:
> {code}
> configuration:
> monitorInterval: 60
> status: WARN
> name: Production Configuration
> packages: com.our.packages
> appenders:
> appender:
> -
> type: Console
> name: CONSOLE
> PatternLayout: { pattern: '%d{yyyy-MMM-dd-HH:mm:ss.SSS}
> [%p|%c{1}|%t|%X{rid}] %h: %m %n' }
> -
> type: RollingRandomAccessFile
> name: AppLog
> fileName: logs/server.log
> filePattern: 'logs/server.log.%d{yyyy-MM-dd-HH}.gz'
> append: true
> PatternLayout: { pattern: '%d{yyyy-MMM-dd-HH:mm:ss.SSS}
> [%p|%c{1}|%t|%X{rid}] %h: %m %n' }
> TimeBasedTriggeringPolicy: { modulate: true }
> DefaultRolloverStrategy: { max: 240 }
> loggers:
> - { name: com.amazonaws, level: warn }
> - { name: org.hibernate, level: warn }
> root:
> level: info
> AppenderRef: { ref: AppLog }
> {code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)