log4j指南

版權聲明:如有轉載請求,請註明出處:http://blog.csdn.net/yzhz  楊爭  


        log4j是java開發人員開發中最常用的日誌工具,但是未必每個人都很明白地使用它。
       本文將log4j的一些知識點做了歸納總結,有助於開發人員更加清楚的掌握log4j,遇到一些與日誌相關的問題,知道如何更好地處理。
 
1、Log4j.properties中至少有一個appender和一個logger。

2、log4j的初始化,通常我們需要把log4j.jar和Log4j.properties或者log4j.xml放入classpath,log4j默認會在classpath中尋找log4j的配置文件,當然我們也可以指定配置文件所在的位置。
比如:
set JAVA_OPTS=%JAVA_OPTS% -Dlog4j.configuration=
或者在程序中指定PropertyConfigurator.configure()(DOMConfigurator.configure()).

3、Log4j中有三個主要的組件,它們分別是Logger、Appender和Layout.
(1)Appender用來指明log信息打印到什麼地方.
(2)Layout的作用是控制Log信息的輸出方式.
(3)logger指定log的名字,打印級別和採用哪種或者哪幾種Appender。
  

4、所有的logger都是繼承於rootLogger,如果某個logger沒有被分配level,那麼它將從一個被分配了級別的最接近它的父logger那裏繼承level。
     所有logger最頂層的父logger爲rootLogger,所以在定義日誌的時候通常我會給rootLogger賦予一個level。

5、log打印的規則:
        當某個logger的logging request(即printing method(error(),info()..))的級別高於或者等於該logger的級別(即在log4j.properties或者log4j.xml中定義)的時候,該logging request就爲enable.
         一旦該logger的logging request爲enable,那麼該logging request將總會打印到該logger所有的appender中包括它的所有父logger的appender。(而不會管父logger的級別如何)。除非該logger的父logger的additivity設置爲false,默認的情況下爲true。
        某個logger的additivity設置爲false,表示log只打印到本log的appender中,而不再打印到其父logger的appender。

6、最簡單的log4j.properties定義
log4j.rootLogger=debug, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

7、log4j定義說明

8、log4j是線程安全的,所以我們一般建議定義log時採用static
private static final Log log = LogFactory.getLog(Main.class);

9、性能優化:
推薦:
if (log.isDebugEnabled()) {
    log.debug("hello" + i + j);
}
而不是直接在程序中調用:
log.debug("hello" + i + j);
這樣在logger打印條件不滿足的情況下就不用執行字符串的操作。

10、實際開發過程中,我們通常會使用Jakarta Commons Logging (JCL),它提供的是一個日誌(Log)接口(interface),允許程序開發人員使用不同的具體日誌實現工具:Log4J, JDK 1.4等。
如果應用程序的classpath中有log4j, Commons Logging則使用相關的包裝(wrapper)類(Log4JLogger)
如果應用程序運行在jdk1.4的系統中, Commons Logging使用相關的包裝類(Jdk14Logger)  

發佈了14 篇原創文章 · 獲贊 1 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章