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.