【轉】配置log4j.xml打印指定類或指定級別的日志


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,做了些小總結,期待交流哈。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM