java - 如果 FileAppender 失败,恢复到 ConsoleAppender

标签 java log4j

使用 log4j,如果 FileAppender 在写入指定日志文件时出现问题,我想恢复到 ConsoleAppender。这意味着捕获 FileNotFoundException 或 IOException 并切换到 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);
    }
}

更新 - 我是如何做到的:

感谢@jsight,为我指明了 FallBackErrorHandler。

这是我的 log4j xml 配置,如果 FileAppender 失败,它会恢复为 ConsoleAppender:

<?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>

最佳答案

关于java - 如果 FileAppender 失败,恢复到 ConsoleAppender,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1504929/

相关文章:

java - log4j xml配置,将一些Logger写入文件和控制台

Java - 当外部类捕获异常时进行监听

java - 在 JetBrain 开发的两个 java 版本之间切换

java - cucumber .runtime.CucumberException : java. lang.NoSuchMethodException

java - 如何识别返回的对象是否是在方法执行期间创建的 - Java

java - log4j.properties 在可执行 jar 中不起作用

java - 捕获异常后,模拟器仍然显示 "Application has stopped unexpectedly "

JavaFX 图表 - 图例之间的空间

java - log4j 将 "sg"添加到每个记录行

java - 如何为 100 个类创建一个记录器