You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@logging.apache.org by "Dmitry (Jira)" <ji...@apache.org> on 2019/11/01 13:23:00 UTC

[jira] [Comment Edited] (LOG4J2-1182) RandomAccessFile IOException: Stream Closed is back

    [ 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:22 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)