首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果FileAppender失败,则恢复为ConsoleAppender

如果FileAppender失败,则恢复为ConsoleAppender
EN

Stack Overflow用户
提问于 2009-10-01 16:11:50
回答 2查看 1.8K关注 0票数 4

对于log4j,如果ConsoleAppender在写入指定的日志文件时遇到问题,我希望恢复到FileAppender。这意味着捕获FileNotFoundException或IOException并切换到ConsoleAppender。

这是以前做过的吗?还是我必须创建一个新的附录--类似于:

代码语言:javascript
复制
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配置,如果ConsoleAppender失败,该配置将恢复为ConsoleAppender:

代码语言:javascript
复制
<?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>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-10-01 17:33:30

FallbackErrorHandler看起来就像你所需要的。下面是一些关于这个主题的邮件列表:

  • http://marc.info/?l=log4j-user&m=109637619726970&w=2
  • http://marc.info/?l=log4j-user&m=104024052821602&w=2
  • http://www.mail-archive.com/log4j-dev@logging.apache.org/msg07491.html
  • http://www.mail-archive.com/log4j-user@jakarta.apache.org/msg06774.html
票数 4
EN

Stack Overflow用户

发布于 2009-10-01 16:51:17

您必须创建一个新的/自定义的附录,因为如果有问题,log4j将不会向您的代码抛出异常。这是log4j的设计目标和特性。

来自log4j常见问题

是一个可靠的日志记录系统吗? 不是的。log4j不可靠。这是一个尽力而为的故障停止日志记录系统。所谓失败停止,我们的意思是log4j不会在运行时抛出意外的异常,从而可能导致应用程序崩溃。如果出于任何原因,log4j抛出了一个不明确的异常,请发送电子邮件到log4j-user@logging.apache.org邮件列表。未被处理的异常作为需要立即注意的严重错误处理。 此外,当指定的输出流未打开、不可写入或已满时,log4j将不会恢复为System.out或System.err。这避免了由于日志记录失败而淹没用户终端,从而破坏了其他工作程序。但是,log4j将向System.err输出一条消息,指示无法执行日志记录。 log4j?的特点是什么? ..。 log4j是失败-停止.然而,尽管log4j确实努力确保交付,但它并不保证每个日志语句都将被传递到其目的地。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1504929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档