log4j 配置簡要說明

雖然以前一直在用log4j,但是對其配置不甚了了,突然間因爲需解決某些問題,要理解log4j的配置,
然而用google搜了一下,卻發現網上沒有一個簡單直觀的說明,於是只好看log4j的官方介紹,終於
理解了log4j的配置用法,以下是我對log4j配置的一點認識,如有謬誤還請不吝賜教.

首先我們搞清楚log4j能幹什麼,簡單來說就是提供一個記錄不同級別信息內容的日誌工具,
可以把不同級別,不同包路徑的信息,以指定格式輸出到多種設備(控制檯,文件等)
在程序中,可以以以下方式來使用
   Log log = org.apache.commons.logging.LogFactory.LogFactory.getLog(yourClassName.class);
  log.debug("debug message -------------------");
  log.info("info message ******************");
  log.warn("warn message +++++++++++++++");
  log.error("error msg=================");
  
本文主要講的是如何配置log4j,先讓我們先看看一個典型的log4j配置:  

==========log4j.properties==================

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{MM-dd HH/:mm/:ss.SSS} %-5p [%F/:%L]%x %m%n

log4j.appender.fileout=org.apache.log4j.RollingFileAppender
log4j.appender.fileout.File=D:/workspace/log4jtest/log/application.log
log4j.appender.fileout.MaxFileSize=10000KB
log4j.appender.fileout.MaxBackupIndex=10
log4j.appender.fileout.layout=org.apache.log4j.PatternLayout
log4j.appender.fileout.layout.ConversionPattern=%d{MM-dd HH:mm:ss.SSS}[%24F:%-3L:%-5p]%x %m%n

log4j.rootCategory=INFO, stdout, fileout
log4j.logger.com.wolfsquare.log2=DEBUG,stdout
===================================

這個文件可以劃爲三小塊

===========第一塊定義了一個名爲 stdout 的appender和layout (appender,layout的概念後面再解釋,目前先記着有這樣兩個名詞):

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
定義stdout的實際輸出實現類,從這個appender實現類名可以猜到,這個類是負責控制檯輸出的。
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
定義stdout的輸出裝飾器
log4j.appender.stdout.layout.ConversionPattern=%d{MM-dd HH/:mm/:ss.SSS} %-5p [%F/:%L]%x %m%n
裝飾器參數配置


============第二塊定義了一個名爲 fileout 的appender和layout:
log4j.appender.fileout=org.apache.log4j.RollingFileAppender
同理可猜這個實現類是輸出到文件的
log4j.appender.fileout.File=D:/workspace/log4jtest/log/application.log
log4j.appender.fileout.MaxFileSize=10000KB
log4j.appender.fileout.MaxBackupIndex=10
log4j.appender.fileout.layout=org.apache.log4j.PatternLayout
log4j.appender.fileout.layout.ConversionPattern=%d{MM-dd HH:mm:ss.SSS}[%24F:%-3L:%-5p]%x %m%n

============第三塊定義了名字分別爲rootCategory,log4j.logger.com.wolfsquare.log2的兩個logger
log4j.rootCategory=INFO, stdout, fileout
log4j.logger.com.wolfsquare.log2=DEBUG,stdout

rootCategory logger是缺省的logger,記錄所有的包的信息輸出。
第二個logger是隻輸出指定包com.wolfsquare.log2下的日誌信息。
那麼INFO,DEBUG又是什麼意思呢,他們是信息的分級標識,通過繼承實現這個實現自定義級別的分級。
第三塊配置兩句的意思是這樣的:
rootCategory 把所有類的INFO級別以上的信息輸出到stdout和fileout兩個appender中,
logger.com.wolfsquare.log2,把com.wolfsquare.log2包中的所有類(包括子包)DEBUG級別(含)以上的信息輸出到stdout 中
一個logger可以輸出到很多個設備中(appender),如果需要增加輸出設備則用分號分隔開appender名稱即可。

輸出信息的分類級別是DEBUG > INFO > WARN > ERROR,信息細節由細到粗,指定輸出某一級別的信息時,
過細的信息輸出將會被忽略

如果一個配置中有多個logger,他們之間會有什麼關係呢?答案是,在輸出上,他們沒有任何關係,都是獨立運作的,
不相關的,但是在配置上,父包的配置會傳給子包,如果子包沒有另外定義配置的話。
例如上面配置文件中的兩個logger:
log4j.logger.com.wolfsquare
log4j.logger.com.wolfsquare.log2

這裏認爲 log4j.logger.com.wolfsquare.log2 繼承自 log4j.logger.com.wolfsquare,他們的配置聲明如下:
log4j.rootCategory=INFO, stdout, fileout
log4j.logger.com.wolfsquare.log2=,stdout
注意第二句沒有指定輸出級別,那麼根據配置繼承規則會繼承父logger的配置,在這裏就是INFO。

同時需要強調的是,如果兩個logger有繼承關係,且輸出到同一個appender,根據輸出獨立原則,那麼將會出現兩行一樣的信息,
例如上面的兩個logger定義會導致這樣的情況。
最後以一幅圖來概括:

 

 

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