淺談log4j的rootLogger及其他坑爹的地方

log4j的rootLogger及其他坑爹地方

這裡用的是org.apache.log4j.Logger

log4j.rootLogger=error, stdout 
log4j.appender.appenderName=org.apache.log4j.AsyncAppender 
 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
#only time no date.outfile1 has date
 
log4j.logger.com.ht=info,outfile1 
log4j.appender.outfile1=org.apache.log4j.RollingFileAppender
log4j.appender.outfile1.File=log/ht.log
log4j.appender.outfile1.MaxFileSize=100MB
log4j.appender.outfile1.MaxBackupIndex=50
log4j.appender.outfile1.layout=org.apache.log4j.PatternLayout
log4j.appender.outfile1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p %c{1}:%L - %m%n
 
log4j.logger.com.ht.log=info,outfile2 
log4j.appender.outfile2=org.apache.log4j.RollingFileAppender
log4j.appender.outfile2.File=log/ht2.log
log4j.appender.outfile2.MaxFileSize=100MB
log4j.appender.outfile2.MaxBackupIndex=50
log4j.appender.outfile2.layout=org.apache.log4j.PatternLayout
log4j.appender.outfile2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p %c{1}:%L - %m%n

然後有兩個類,Test1在com.ht包下面,Test2在com.ht.log包下面。每個下面打印一句:logger.info();

經過試驗發現!!!!

Test1將輸出到控制臺和ht.log

Test2將輸出到控制臺和ht.log和ht2.log

註意這裡rootLogger的級別可是error,可見這裡的級別不起作用。

對於申明appender的包rootLogger的級別設置不起作用

其實,這裡的error隻對於沒有申明appender的包才起作用。如果去掉log4j.logger.com.ht.log這一句,Test1沒有任何輸出,除非logger.error才會輸出到控制臺。

第二點:凡是申明appender的包,不論申明級別一定會包含rootLogger的輸出,如果同時指定瞭outfile,那麼日志會出現兩份。

第三點:com.ht.log這個包下面的類可以匹配到所有上級目錄的設置。

日志怎麼設置要想清楚啊!不然這一句打到控制臺那句打到文件,出問題瞭查出來的日志不連貫,好幾個文件查來查去。

log4j.additivity.com.ht=false 可以不寫入rootLogger。默認是true

log4j rootLogger配置

log4j.rootLogger=INFO,db語法為

log4j.rootLogger = [ level ] , appenderName1, appenderName2, …
  • level:是日志記錄的優先級,分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定義的級別。

Log4j建議隻使用四個級別,優先級從高到低分別是ERROR、WARN、INFO、DEBUG。

通過在這裡定義的級別,您可以控制到應用程序中相應級別的日志信息的開關。

比如在這裡定義瞭INFO級別,則應用程序中所有DEBUG級別的日志信息將不被打印出來。

appenderName:就是指定日志信息輸出到哪個地方。您可以同時指定多個輸出目的地。

例如:

log4j.rootLogger=info,A1,B2,C3 配置瞭3個輸出地方,這個名字可以任意(如上面的db),但必須與我們在後面進行的設置名字對應;

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: