淺談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();
經過試驗發(fā)現(xiàn)?。。?!
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,那么日志會出現(xiàn)兩份。
第三點:com.ht.log這個包下面的類可以匹配到所有上級目錄的設置。
日志怎么設置要想清楚?。〔蝗贿@一句打到控制臺那句打到文件,出問題了查出來的日志不連貫,好幾個文件查來查去。
log4j.additivity.com.ht=false 可以不寫入rootLogger。默認是true
log4j rootLogger配置
log4j.rootLogger=INFO,db語法為
log4j.rootLogger = [ level ] , appenderName1, appenderName2, …
level
:是日志記錄的優(yōu)先級,分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定義的級別。
Log4j建議只使用四個級別,優(yōu)先級從高到低分別是ERROR、WARN、INFO、DEBUG。
通過在這里定義的級別,您可以控制到應用程序中相應級別的日志信息的開關。
比如在這里定義了INFO級別,則應用程序中所有DEBUG級別的日志信息將不被打印出來。
appenderName:就是指定日志信息輸出到哪個地方。您可以同時指定多個輸出目的地。
例如:
log4j.rootLogger=info,A1,B2,C3 配置了3個輸出地方,這個名字可以任意(如上面的db),但必須與我們在后面進行的設置名字對應;
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
java利用注解實現(xiàn)簡單的excel數(shù)據(jù)讀取
這篇文章主要為大家詳細介紹了java利用注解實現(xiàn)簡單的excel數(shù)據(jù)讀取,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06Java如何實現(xiàn)支付寶電腦支付基于servlet版本
這篇文章主要介紹了Java如何實現(xiàn)支付寶電腦支付基于servlet版本,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-11-11SpringMVC實現(xiàn)Controller的三種方式總結
這篇文章主要介紹了SpringMVC實現(xiàn)Controller的三種方式總結,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02Spring?Cloud?使用?Resilience4j?實現(xiàn)服務熔斷的方法
服務熔斷是為了保護我們的服務,比如當某個服務出現(xiàn)問題的時候,控制打向它的流量,讓它有時間去恢復,或者限制一段時間只能有固定數(shù)量的請求打向這個服務,這篇文章主要介紹了Spring?Cloud?使用?Resilience4j?實現(xiàn)服務熔斷,需要的朋友可以參考下2022-12-12