Log4J学习【三十五】错误处理之FallbackErrorHandler续
来源:互联网 发布:windows sdk 8.1下载 编辑:程序博客网 时间:2024/04/28 14:33
在Log4J中,最常用的就是这里介绍的OnlyOnceErrorHandler和FallbackErrorHandler。下面,我们再来简单分析下FallbackErrorHandler的代码。
同样的,在分析别人代码之前,我们先来思考下,如果是我们,应该怎么实现这个功能。首先,我们的FallbackErrorHandler需要实现ErrorHandler接口中的方法,先看看几个set方法的实现,对于setAppender和setBackupAppender方法,我们只需要在FallbackErrorHandler里面维护这两个Appender的引用即可;但是对于setLogger方法,我们就需要在FallbackErrorHandler里面使用一个集合来保存所有添加进来的Logger;对于error方法,我们要做的就是遍历所有维护的Logger,然后把这些Logger的所有的Appender都去掉,然后再使用addAppender把维护的backupAppender添加到Logger之上。就完成了Appender的切换,我们来看看是不是这样实现的:
public void setLogger(Logger logger) {
LogLog.debug("FB: Adding logger [" + logger.getName() + "].");
if (loggers == null) {
loggers = new Vector();
}
loggers.addElement(logger);
}
首先是setLogger,确实是把所有添加的Logger全部放到了loggers里面维护。
public void setAppender(Appender primary) {
LogLog.debug("FB: Setting primary appender to [" + primary.getName() + "].");
this.primary = primary;
}
public void setBackupAppender(Appender backup) {
LogLog.debug("FB: Setting backup appender to [" + backup.getName() + "].");
this.backup = backup;
}
再看看两个setAppender方法,确实也是在ErrorHandler里面维护了这两个Appender的实例,最后来看看error方法:
public void error(String message, Exception e, int errorCode, LoggingEvent event) {
if (e instanceof InterruptedIOException) {
Thread.currentThread().interrupt();
}
if (loggers != null) {
for (int i = 0; i < loggers.size(); i++) {
Logger l = (Logger) loggers.elementAt(i);
l.removeAppender(primary);
l.addAppender(backup);
}
}
}
重点就是下面的for循环,可以看到,的确是先遍历所有的维护的logger,但是他并没有全部移除Appender,而是只移除了出错的Appender,然后把备用的Appender添加上去。其实看完这个代码,我们又学习了Logger的一个removeAppender(Appender)方法。
同样的,在分析别人代码之前,我们先来思考下,如果是我们,应该怎么实现这个功能。首先,我们的FallbackErrorHandler需要实现ErrorHandler接口中的方法,先看看几个set方法的实现,对于setAppender和setBackupAppender方法,我们只需要在FallbackErrorHandler里面维护这两个Appender的引用即可;但是对于setLogger方法,我们就需要在FallbackErrorHandler里面使用一个集合来保存所有添加进来的Logger;对于error方法,我们要做的就是遍历所有维护的Logger,然后把这些Logger的所有的Appender都去掉,然后再使用addAppender把维护的backupAppender添加到Logger之上。就完成了Appender的切换,我们来看看是不是这样实现的:
public void setLogger(Logger logger) {
LogLog.debug("FB: Adding logger [" + logger.getName() + "].");
if (loggers == null) {
loggers = new Vector();
}
loggers.addElement(logger);
}
首先是setLogger,确实是把所有添加的Logger全部放到了loggers里面维护。
public void setAppender(Appender primary) {
LogLog.debug("FB: Setting primary appender to [" + primary.getName() + "].");
this.primary = primary;
}
public void setBackupAppender(Appender backup) {
LogLog.debug("FB: Setting backup appender to [" + backup.getName() + "].");
this.backup = backup;
}
再看看两个setAppender方法,确实也是在ErrorHandler里面维护了这两个Appender的实例,最后来看看error方法:
public void error(String message, Exception e, int errorCode, LoggingEvent event) {
if (e instanceof InterruptedIOException) {
Thread.currentThread().interrupt();
}
if (loggers != null) {
for (int i = 0; i < loggers.size(); i++) {
Logger l = (Logger) loggers.elementAt(i);
l.removeAppender(primary);
l.addAppender(backup);
}
}
}
重点就是下面的for循环,可以看到,的确是先遍历所有的维护的logger,但是他并没有全部移除Appender,而是只移除了出错的Appender,然后把备用的Appender添加上去。其实看完这个代码,我们又学习了Logger的一个removeAppender(Appender)方法。
0 0
- Log4J学习【三十五】错误处理之FallbackErrorHandler续
- Log4J学习【三十四】错误处理之FallbackErrorHandler
- Log4J学习【三十三】错误处理之ErrorHandler
- Log4J学习【三十二】错误处理
- Android学习笔记三十五之HTTP协议
- 学习笔记之错误处理
- Kettle学习之错误处理
- log4j日志处理学习
- Android的ViewFlipper-android学习之旅(三十五)
- 大数据学习笔记之三十五 NoSQL相关知识
- opencv学习(三十五)之仿射变换warpAffine
- React学习之扩展LinkedStateMixin双向绑定(三十五)
- Zend Framework学习 之错误处理
- php学习之基础五 错误处理
- hadoop学习之wordcount运行错误处理
- log4j学习之SocketAppender
- 学习笔记之log4j
- java基础之Flex弹性布局、JSP错误处理以及Log4J
- Log4J学习【三十四】错误处理之FallbackErrorHandler
- Spring框架中获得DataSource对象的方法
- 装箱和拆箱 (判断两个类型转换是否构成装箱或拆箱,要看它们是否存在继承关系)
- php 生成 pdf ,dompdf 库使用
- Ubuntu 14.10 中安装 VMware11 Tools
- Log4J学习【三十五】错误处理之FallbackErrorHandler续
- 第三章 internet 总结
- 蓝牙协议
- java io 使用规则
- C# DataTable的詳細用法
- C语言编程中对于函数参数的一些解释?
- 《嵌入式Linux系统工程师实训教程》读书笔记(二)
- delegate 回调函数(委托)
- linux中查看文件时显示行号