From:http://www.360doc.com/content/10/1114/14/573136_69267215.shtml
把指定類的日志信息輸出到指定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,做了些小總結,期待交流哈。