AbstractOutputStreamAppender have this code:

public void append(final LogEvent event) {
    try {
        tryAppend(event);
    } catch (final AppenderLoggingException ex) {
        error("Unable to write to stream " + manager.getName() + " for
appender " + getName() + ": " + ex);
        throw ex;
    }
}


Is that really the proper way of doing it? When I try this:

<Configuration status="WARN">
    <Appenders>
        <File name="File" fileName="/etc/test.log" createOnDemand="true">
            <PatternLayout pattern="%date %5level %X %logger{15}: %message%n"/>
        </File>
    </Appenders>
    <Loggers>
        <Root level="INFO">
            <AppenderRef ref="File"/>
        </Root>
    </Loggers>
</Configuration>

I get two errors when it fails to create the file in /etc:

2017-05-04 14:50:37,566 main ERROR Unable to write to stream /etc/test.log
for appender File:
org.apache.logging.log4j.core.appender.AppenderLoggingException: Error
writing to stream /etc/test.log
2017-05-04 14:50:37,570 main ERROR An exception occurred processing
Appender File
org.apache.logging.log4j.core.appender.AppenderLoggingException: Error
writing to stream /etc/test.log
at
org.apache.logging.log4j.core.appender.OutputStreamManager.writeToDestination(OutputStreamManager.java:258)
at
org.apache.logging.log4j.core.appender.FileManager.writeToDestination(FileManager.java:177)
at
org.apache.logging.log4j.core.appender.OutputStreamManager.flushBuffer(OutputStreamManager.java:288)
at
org.apache.logging.log4j.core.appender.OutputStreamManager.flush(OutputStreamManager.java:297)
at
org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.directEncodeEvent(AbstractOutputStreamAppender.java:179)
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.log(LoggerConfig.java:403)
at
org.apache.logging.log4j.core.config.AwaitCompletionReliabilityStrategy.log(AwaitCompletionReliabilityStrategy.java:63)
at org.apache.logging.log4j.core.Logger.logMessage(Logger.java:146)
at
org.apache.logging.log4j.spi.AbstractLogger.logMessageSafely(AbstractLogger.java:2091)
at
org.apache.logging.log4j.spi.AbstractLogger.logMessage(AbstractLogger.java:1988)
at
org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:1960)
at org.apache.logging.log4j.spi.AbstractLogger.info
(AbstractLogger.java:1262)
at logtest.Main.main(Main.java:29)
Caused by: java.io.FileNotFoundException: /etc/test.log (Permission denied)
at java.io.FileOutputStream.open0(Native Method)
at java.io.FileOutputStream.open(FileOutputStream.java:270)
at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
at java.io.FileOutputStream.<init>(FileOutputStream.java:133)
at
org.apache.logging.log4j.core.appender.FileManager.createOutputStream(FileManager.java:120)
at
org.apache.logging.log4j.core.appender.OutputStreamManager.getOutputStream(OutputStreamManager.java:166)
at
org.apache.logging.log4j.core.appender.OutputStreamManager.writeToDestination(OutputStreamManager.java:256)
... 21 more


(AbstractWriterAppender seems to have a similar problem.)

Wouldn't it be better with something like this:

public void append(final LogEvent event) {
    try {
        tryAppend(event);
    } catch (final Exception ex) {
        error("Unable to write to stream " + manager.getName() + " for
appender " + getName(), event, ex);
    }
}

And then change the relevant Manager code to not catch exceptions.

-- 
[image: MagineTV]

*Mikael Ståldal*
Senior software developer

*Magine TV*
mikael.stal...@magine.com
Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   www.magine.com

Privileged and/or Confidential Information may be contained in this
message. If you are not the addressee indicated in this message
(or responsible for delivery of the message to such a person), you may not
copy or deliver this message to anyone. In such case,
you should destroy this message and kindly notify the sender by reply
email.

Reply via email to