[ 
https://issues.apache.org/jira/browse/LOG4J2-1182?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16964822#comment-16964822
 ] 

Dmitry commented on LOG4J2-1182:
--------------------------------

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)

Reply via email to