淺談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。
推薦閱讀:
- log4j配置失效日志中打印Debug信息問題
- Log4j.properties配置及其使用
- log4j如何根據變量動態生成文件名
- maven如何使用slf4j輸出日志到文件
- .NET6在WebApi中使用日志組件log4net