首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

log4j-日记分级输出

2013-12-04 
log4j-日志分级输出Apache Log4j 架构 Apache Log4j是当前在J2EE和J2SE开发中用得最多的日志框架(几乎所有

log4j-日志分级输出
Apache Log4j 架构
Apache Log4j是当前在J2EE和J2SE开发中用得最多的日志框架(几乎所有项目都用它),因为它具有出色的性能、灵活的配置以及丰富的功能,并且在业务有特殊的要求时,可以使用自定义组件来代替框架中已有的组件来满足要求。

log4j组件介绍
Log4j主要有三个组件:
      ?Logger:负责供客户端代码调用,执行debug(Object msg)、info(Object msg)、warn(Object msg)、error(Object msg)等方法。
?Appender:负责日志的输出,Log4j已经实现了多种不同目标的输出方式,可以向文件输出日志、向控制台输出日志、向Socket输出日志等。
?Layout:负责日志信息的格式化。


Logger 层级介绍
Logger的层级是logger名字指定的,如x.y 表示两层,x层和y层,x是y的父层级,x.y所在层级是y层级

log4j.additivity.* = false : 表示当前logger不需要打到父层级所指定的appender,只打到当前的appender;
      默认true:表示当前logger将打印日志到当前的appender及所有的父层级所指定的appender

Logger和Appender是一对多,Appender和Layout是一对一关系。
这三个组件中,主要的扩展点是Appender.


下面先介绍一个日志分级输出(即不同级别日志输出到不同地方)。

a.使用不同Logger,比如logger1专门输出Info级别日志,logger2专门输出ERROR级别日志,等等。不过一般都是用一个logger,所以这种做法不是太可取。
b.使用FILTER(如:LevelRangeFilter),但是需要注意的是要用XML配置文件的方式。使用properties方式不支持,properties方式还有一些其他高级功能也不支持。


c.使用Threshold属性。如:log4j.appender.R.Threshold = INFO 
而它的作用是输出INFO级别以上的内容,所以info.log文件中包含了ERROR级别的文件。
所以不满足要求,还需要定义自己的Appender类,继承DailyRollingFileAppender,改写针对Threshold 的设置说明。
源代码记载
@Overridepublic void append(LoggingEvent event) {if(!"DEBUG".equals(event.getLevel().toString())){return;}System.out.println(this.getLayout().format(event));//System.out.println("LEVEL="+event.getLevel());//System.out.println("message="+event.getMessage());}

这种方式楼主亲测过,而且不用Threshold 属性。

热点排行