Log4J学习【三十三】错误处理之ErrorHandler

上一章讲的除了三个error方法,可能另外的三个方法还是稍微有些难以理解,我们先来看看Log4J为我们提供的ErrorHandler。
    默认情况下,每一个Appender都对应一个默认的ErrorHandler,叫做OnlyOnceErrorHandler,这个errorHandler是在AppenderSkeleton中定义的:
protected ErrorHandler errorHandler = new OnlyOnceErrorHandler();
    这个ErrorHandler会干什么呢?我们来做一个测试:
log4j.rootLogger=DEBUG,file
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.file=log.log
log4j.appender.file.layout=org.apache.log4j.SimpleLayout

    创建一个FileAppender,日志文件名称为log.log。然后我们在文件目录下创建一个log.log文件,然后设置文件属性为只读。创建一个测试案例:
@Test
    public void testOnlyOnceErrorHandler(){
    Logger logger=Logger.getLogger("cd.itcast");
    logger.warn("logger warn");
    logger.warn("logger warn");
    logger.warn("logger warn");
}

    在测试中,我们连续记录三条日志,运行测试:
log4j:ERROR setFile(null,true) call failed.
java.io.FileNotFoundException: log.log 
(拒绝访问。)
    观察控制台中的输出,首先,使用log4j:ERROR输出了一次错误,这个错误就是OnlyOnceErrorHandler打印的;其次,只打印了一次错误,这个就是onlyonce的意思。其实每次做日志,都会尝试向log.log文件中添加日志内容,但因为是Onlyonce,所以,只会把第一次出错打印。看到了OnlyOnceErrorHandler的表现形式之后,我们来看看他的代码:
public void error(String message, Exception e, int errorCode, LoggingEvent event) {
    if (e instanceof InterruptedIOException || e instanceof InterruptedException) {
        Thread.currentThread().interrupt();
    }
    if (firstTime) {
        LogLog.error(message, e);
        firstTime = false;
    }
}

    在这个类里面,就只实现了error方法,在这个方法中,首先记录是否是第一次出错,如果是第一次出错,就直接打印错误。这个OnlyOnceErrorHandler在配置上没有任何代表性,他只是很简单的给了我们一个ErrorHandler的实现方式。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值