把指定類的日志信息輸出到指定appender里:
============================================================
<!--appender中,Theshold和Filter都是可選。不過(guò),建議這種目的下最好不要寫(xiě),這樣,什么信息會(huì)輸出到該appender中,就只由指定logger的appender-ref的值來(lái)決定。否則會(huì)受到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">
<!--指定類的日志級(jí)別,會(huì)影響指定類日志發(fā)出信息的成功與否-->
<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,則級(jí)別不低于warn的日志信息都會(huì)輸出到appender-3中。
把各個(gè)級(jí)別的日志信息輸出到各個(gè)的appender里,可使用過(guò)濾器,下面以info級(jí)別為例:
============================================================
<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只接受信息級(jí)別為info的日志信息。
再說(shuō)說(shuō)關(guān)于root的一些情況:
============================================================
root元素定義的一些信息只供作默認(rèn)情況和繼承用。
只要后面的logger或appender,稍作顯式聲明,這些信息都會(huì)被覆蓋。
以下面為例:
<root>
<level value="warn"/>
<appender-ref ref="appender-1"/>
<appender-ref ref="appender-2"/>
</root>
默認(rèn)情況是:
1. 輸出器appender-1和appender-2只接受不低于warn級(jí)別的日志信息,不過(guò)一旦指定了Theshold或Filter,就以指定的為準(zhǔn)。
2.日志記錄器logger的輸出器appender,默認(rèn)會(huì)輸出到appender-1和appender-2中,若指定了<appender-ref value="appender-3" />,則日志信息會(huì)輸出到這三個(gè),要停止這種繼承關(guān)系,可添加additivity=false。
log4j簡(jiǎn)明手冊(cè)中的要點(diǎn)。
.1 Named Hierarchy
如果一個(gè)logger 的名字后面跟著一個(gè)點(diǎn)號(hào)(dot),它就是點(diǎn)號(hào)(dot)后面的那個(gè)logger的前輩( ancestor),是這個(gè)晚輩(descendant) 的前綴。如果在它自己和這個(gè)晚輩之間沒(méi)有其它的前輩,它和這個(gè)晚輩之間就是父子關(guān)系。
.2 Level Inheritance
對(duì)于一個(gè)給定的logger C,它繼承的級(jí)別等于logger階層里,從C開(kāi)始往root logger上去的第一個(gè)non-null級(jí)別。
.3 Basic Selection Rule
在一個(gè)級(jí)別為q(被指定的或繼承的)的logger里,一個(gè)級(jí)別為p的日志請(qǐng)求,只有在p >= q 時(shí)才能夠被執(zhí)行。
.4 Appender Additivity
Logger C的log輸出信息將被輸出到C的所有appenders和它的前輩的 appenders。這就是"appender additivity"的意思。
但是,如果logger C的前輩,比如說(shuō)P,P的additivity flag被設(shè)置為false,那么,C的輸出信息將被輸出到C的所有appenders中去,以及它的前輩的——截止在P那里,包括P在內(nèi)的,appenders中去,但是不會(huì)輸出到P的前輩的 appenders中去。
默認(rèn)情況下,Loggers的additivity flag設(shè)置為true。
log4j簡(jiǎn)明手冊(cè):http://log4j.jaxmao.org/log4j/docs/manual.html
初次實(shí)施log4j,做了些小總結(jié),期待交流哈。
聯(lián)系客服