您的位置:首页 > 其它

如何通过配置log4j.xml来打印指定类或指定级别的日志信息

2010-08-15 13:36 736 查看
把指定类的日志信息输出到指定appender里:

============================================================

<!--appender中,Theshold和Filter都是可选。不过,建议这种目的下最好不要写,这样,什么信息会输出到该appender中,就只由指定logger的appender-ref的值来决定。否则会受到Theshold和Filter值的影响)。-->

<appender name="appender-3" class="org.apache.log4j.DailyRollingFileAppender">

<param name="file" value="${loggingRoot}/file.log"/>

<param name="append" value="true"/>

<param name="encoding" value="GBK"/>

<layout class="org.apache.log4j.PatternLayout">

<param name="ConversionPattern" value="%p [%d{HH:mm:ss}] %c{1}.%M(%L) - %m%n"/>

</layout>

</appender>

<logger name="com.a.b.c.d.e" additivity="false">

<!--指定类的日志级别,会影响指定类日志发出信息的成功与否-->

<level value = "debug" />

<appender-ref ref="appender-3" />

</logger>

同样,在root元素里不要指定该appender,如下:

<root>

<level value="warn"/>

<appender-ref ref="appender-1"/>

<appender-ref ref="appender-2"/>

</root>

这样的话,就杜绝了被其他logger继承的可能性。

此例中,如果在root里指定了该appender,则级别不低于warn的日志信息都会输出到appender-3中。

把各个级别的日志信息输出到各个的appender里,可使用过滤器,下面以info级别为例:

============================================================

<appender name="appender-info" class="org.apache.log4j.DailyRollingFileAppender">

<param name="file" value="${loggingRoot}/info.log"/>

<param name="append" value="true"/>

<param name="encoding" value="GBK"/>

<layout class="org.apache.log4j.PatternLayout">

<param name="ConversionPattern" value="%p [%d{HH:mm:ss}] %c{1}.%M(%L) - %m%n"/>

</layout>

<filter class="org.apache.log4j.varia.LevelRangeFilter">

<param name="LevelMin" value="INFO" />

<param name="LevelMax" value="INFO" />

</filter>

</appender>

appender-info只接受信息级别为info的日志信息。

再说说关于root的一些情况:

============================================================

root元素定义的一些信息只供作默认情况和继承用。

只要后面的logger或appender,稍作显式声明,这些信息都会被覆盖。

以下面为例:

<root>

<level value="warn"/>

<appender-ref ref="appender-1"/>

<appender-ref ref="appender-2"/>

</root>

默认情况是:

1. 输出器appender-1和appender-2只接受不低于warn级别的日志信息,不过一旦指定了Theshold或Filter,就以指定的为准。

2. 日志记录器logger的输出器appender,默认会输出到appender-1和appender-2中,若指定了<appender-ref value="appender-3" />,则日志信息会输出到这三个,要停止这种继承关系,可添加additivity=false。

log4j简明手册中的要点。

.1 Named Hierarchy

如果一个logger 的名字后面跟着一个点号(dot),它就是点号(dot)后面的那个logger的前辈( ancestor),是这个晚辈(descendant) 的前缀。如果在它自己和这个晚辈之间没有其它的前辈,它和这个晚辈之间就是父子关系。

.2 Level Inheritance

对于一个给定的logger C,它继承的级别等于logger阶层里,从C开始往root logger上去的第一个non-null级别。

.3 Basic Selection Rule

在一个级别为q(被指定的或继承的)的logger里,一个级别为p的日志请求,只有在p >= q 时才能够被执行。

.4 Appender Additivity

Logger C的log输出信息将被输出到C的所有appenders和它的前辈的 appenders。这就是"appender additivity"的意思。

但是,如果logger C的前辈,比如说P,P的additivity flag被设置为 false,那么,C的输出信息将被输出到C的所有appenders中去,以及它的前辈的——截 止在P那里,包括P在内的,appenders中去,但是不会输出到P的前辈的 appenders中去。

默认情况下,Loggers的additivity flag设置为true。

log4j简明手册:http://log4j.jaxmao.org/log4j/docs/manual.html

初次实施log4j,做了些小总结,期待交流哈。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐