log4j入門

這裏僅介紹配置文件的思想順序方便理解,具體配置網上會有很多,不在此過多介紹
首先,需要了解log4j的幾個預定義級別
debug < info < warn < error < fatal
分別可以控制想要的不同級別的輸出規則

---------------------------------------------------------------------------
log4j裏面有兩個核心的概念,一個是appender、一個是logger,這裏,我們需要先要有一個計劃,就是把日誌想要輸出到什麼位置、以什麼樣的形式。
---------------------------------------------------------------------------
所以,我們先來看appender
他的作用是我們來配置日誌需要輸出到什麼位置,以什麼樣的格式輸出
Appender分別提供瞭如下幾種
# org.apache.log4j.ConsoleAppender(控制檯),
#org.apache.log4j.FileAppender(文件),
#org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌文件),
#org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件),
#org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任意指定的地方)

比如如下代碼

log4j.appender.INFO = org.apache.log4j.DailyRollingFileAppender
log4j.appender.INFO.File = /Volumes/Data/javaLog/info.log
log4j.appender.INFO.Threshold = info
log4j.appender.INFO.layout = org.apache.log4j.PatternLayout
log4j.appender.INFO.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%-5p] %x [ %t:%r ] - %m%n

第一行就是我們選擇用哪一種輸出形式
第二行就是輸出文件的位置目錄
第三行是這種輸出需要過濾的日誌級別,也就是低於這個級別的都在這裏被忽略,稍後詳細寫
第四行是輸出格式的選擇,基本提供瞭如下等
org.apache.log4j.HTMLLayout(以HTML表格形式佈局)
org.apache.log4j.PatternLayout(可以靈活地指定佈局模式)
org.apache.log4j.SimpleLayout(包含日誌信息的級別和信息字符串)
org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程、類別等等信息)
第五行就是具體輸出的格式了,因爲第四行選擇了自定義的佈局,第五行使用匹配的表達式來輸出。

這樣輸出的形式基本就配置完了,我們還可以選擇其他的形式輸出,根據自己的需求。

---------------------------------------------------------------------------
下面就是Logger了,我們要針對於不同的需求和代碼,輸出到不同的Appender中,上面我們已經設置好Appender,在Logger中配置對應的輸出即可。

---------------------------------------------------------------------------
我們先來看rootLogger
也就是整個log的根
代碼如下
log4j.rootLogger = debug , DEBUG , CONSOLE , INFO , ERROR
這裏面其實要分爲兩部分,第一部分,就是等號後面的第一個參數,就是我們之前說到的5種日誌級別,我們在這裏面配置我們所有的日誌的最低級別是什麼,比如是error,那麼所有error級別以下的日誌,都不會被記錄,我們這裏配置的是debug。
後面的幾個參數就是不同的Appender。
意思就是,所有高於debug級別的日誌,會分別向後面4個日誌輸出方式進行輸出

---------------------------------------------------------------------------
然後我們在看Logger
我們配置的所有Logger其實都相當於是繼承rootLogger的配置,如果我們不單獨配置,則使用rootLogger,如果我們配置的級別比rootLogger高,則會在相應自己的配置上使用這個規則,舉例說明
log4j.logger.com.ibatis = info
這句配置的意思就是,在com.ibatis包下所輸出的日誌,只有info級以上的,會分別輸出到rootLogger配置的4個日誌輸出方式中輸出

再舉例
log4j.logger.com.ibatis = info, DEBUG
這句話的意思和上句其實級別是一樣的,不過,[color=red]他會在DEBUG這個Appender中輸出兩次日誌,也就是,這裏面的Logger,是屬於包含的關係,rootLogger屬於覆蓋整個包的範圍之內,而com.ibatis包下有自己的日誌觸發,所以兩個都會捕捉到並進行處理,如果說我們又配置了一個[/color]
log4j.logger.com = info, DEBUG的話,一次執行日誌輸出,DEBUG中就會被輸出三次,因爲有三個地方在捕捉

所以這個地方我們一定要注意,否則日誌輸出很多次,看起來可能影響閱讀和理解。
如果我們想在Logger只用自己的,而不再繼承rootLogger,則用如下寫法
log4j.additivity.com.ibatis=false
也就是設置additivity,這樣就只會按照自己的級別規則進行輸出了,也就是僅輸出一次。

---------------------------------------------------------------------------
思想流程就是這些,具體的配置還需要看文檔
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章