log4j-自定义appender 来扩展 log4j 框架

本文多参考自: http://www.360doc.com/content/05/0803/23/73_4468.shtml

log4j 环境包括三个主要组件:

logger(日志记录器):控制要启用或禁用哪些日志记录语句。可以对日志记录器指定如下级别: ALL 、DEBUG 、 INFO 、 WARN 、 ERROR , FATA或 OFF 。
layout(布局):根据用户的愿望格式化日志记录请求。
appender:向目的地发送格式化的输出。
理解 appender
log4j 框架允许向任何日志记录器附加多个 appender。可以在任何时候对某个日子记录器添加(或删除)appender。附随 log4j 分发的 appender 有多个,包括:

ConsoleAppender
FileAppender
SMTPAppender
JDBCAppender
JMSAppender
NTEventLogAppender
SyslogAppender
...
也可以创建自己的自定义 appender。

所有的 appender 都必须扩展 org.apache.log4j.AppenderSkeleton 类,这是一个抽象类,它实现了 org.apache.log4j.Appender 和 org.apache.log4j.spi.OptionHandler 接口。

所以创建自己的自定义 appender有两种方式:
1.继承已有的那几个已有的appender,或者继承这几个类的父类(比如:WriterAppender),这样可以使用已有的一些功能,只需要修改自己所要的功能。
2.直接继承AppenderSkeleton 类,所以一切自定义。

编写自定义 appender 的诀窍

1.扩展 AppenderSkeleton 抽象类。
2.指定您的 appender 是否需要 layout。
3.如果某些属性必须同时激活,则应该在 activateOptions() 方法内完成。
4.实现 close() 方法。它必须把 closed 字段的值设置为 true 。记得释放所有资源。
5.可选地指定要使用的默认 ErrorHandler 对象。
6.编写 append() 方法的代码。这个方法负责附加日志记录事件,并在错误发生时负责调用错误处理程序。
详细说明请参考文章开头的博闻,下面给出一个简单的示例:
public class MyAppender extends AppenderSkeleton{

	@Override
	public void append(LoggingEvent event) {
		if("DEBUG".equals(event.getLevel().toString())){
			System.out.println("1111");
			return;
		}
		System.out.println(this.getLayout().format(event));
		System.out.println("LEVEL="+event.getLevel());
		System.out.println("message="+event.getMessage());
	}

	@Override
	public void close() {
		// TODO Auto-generated method stub
	}

	@Override
	public boolean requiresLayout() {
		// TODO Auto-generated method stub
		return true;
	}

}


PS:如果想获得log4j.properties中的自定义属性,只要在MyAppender 中定义相同属性,给出set/get方法。

其他组件也可以扩展,比如LEVEL,FILTER,具体怎么扩展,大致是参考原来的组件实现哪个接口,或者继承哪个类,一般继承一个类比较好,省去一些代码。
log4j 2已经出来了,期待他的表现,应该功能更强大,扩展更方便。所以1版本暂时不研究

猜你喜欢

转载自lastsoul.iteye.com/blog/1977000