If FileAppender is not working, return to ConsoleAppender

With log4j, I would like to return to ConsoleAppender if FileAppender has problems writing to the specified log file. This means that you will catch a FileNotFoundException or IOException and switch to ConsoleAppender.

This has been done before or I need to create a new appender - something like lines:

private WriterAppender appender;

public FileOrConsoleAppender(Layout layout, String filename, boolean append) {
    try {
        appender = new FileAppender(layout, filename, append, bufferedIO, bufferSize);
    }
    catch (IOException e) {
        appender = new ConsoleAppender(layout);
    }
}

UPDATE - HOW TO DO:

Thanks @jsight, pointing me to FallBackErrorHandler.

Here is my log4j xml configuration that returns to ConsoleAppender if FileAppender does not work:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="true">

  <!-- A Console appender -->
  <appender name="console" class="org.apache.log4j.ConsoleAppender">
    <param name="Target" value="System.out"/>
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d %-5p %30.30c - %m%n"/>
    </layout>
  </appender>

  <!-- A File appender, with fallback to Console-->
  <appender name="file" class="org.apache.log4j.DailyRollingFileAppender">
  <errorHandler class="org.apache.log4j.varia.FallbackErrorHandler">
       <root-ref/>
       <appender-ref ref="console"/>
  </errorHandler>
    <param name="File" value="C:/temp/test.log"/>
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d %-5p %30.30c - %m%n"/>
    </layout>
  </appender>

<root>
       <level value="INFO" />
       <appender-ref ref="file" />
</root>

</log4j:configuration>
+3
source share
2 answers

/ appender, log4j , . log4j.

log4j:

log4j ?
. Log4j . .

, log4j , . - log4j , log4j-user@logging.apache.org. , .

, log4j System.out System.err, , . , . log4j System.err, , .

log4j?
...
log4j . , , , , , log4j , .

+1

Source: https://habr.com/ru/post/1719024/


All Articles