С log4j, я хотел бы вернуться к ConsoleAppender, если FileAppender имеет проблемы с записью в указанный файл журнала. Это означает, что вы поймаете FileNotFoundException или IOException и переключитесь на ConsoleAppender.Если FileAppender не работает, вернитесь к ConsoleAppender
ли это было сделано раньше, или мне придется создать новую Appender - что-то вдоль линий:
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 - как я это сделал:
Благодаря @jsight, для указания мне на FallBackErrorHandler.
Вот мой log4j конфигурации XML, который возвращается к ConsoleAppender, если FileAppender не удается:
<?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>