log4j 日誌的配置
一、配置根Logger,格式為:
log4j.rootLogger = [ level ] , appenderName, appenderName, …
其中level為日誌級別,appenderName 則是日誌輸出型別。
二、日誌級別(從高到底)
- off 關閉所有日誌記錄。
- fatal 指出每個嚴重的錯誤事件將會導致應用程式的退出。
- error 指出雖然發生錯誤事件,但仍然不影響系統的繼續執行。
- warm 表明會出現潛在的錯誤情形。
- info 一般用於粗粒度級別上,強調應用程式的執行全程。
- debug 一般用於細粒度級別上,對除錯應用程式非常有幫助。
- all 用於開啟所有日誌記錄。
三、appender 日誌輸出型別
appender的名字是可以隨便起的,只要在下面的配置中做對應的配置就好。Log4j官方的appender給出了以下幾種實現
- org.apache.log4j.ConsoleAppender(控制檯)
- org.apache.log4j.FileAppender(檔案)
- org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌檔案)
- org.apache.log4j.RollingFileAppender(檔案大小到達指定尺寸的時候產生一個新的檔案)
- org.apache.log4j.WriterAppender(將日誌資訊以流格式傳送到任意指定的地方)
log4j.rootLogger=DEBUG, Console ,File ,DailyRollingFile ,RollingFile
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n
#File
log4j.appender.File = org.apache.log4j.FileAppender
log4j.appender.File.File = C://log2.log
log4j.appender.File.layout = org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n
#DailyRollingFile
log4j.appender.DailyRollingFile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.DailyRollingFile.File = C://log3.log
log4j.appender.DailyRollingFile.layout = org.apache.log4j.PatternLayout
log4j.appender.DailyRollingFile.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n
#RollingFile
log4j.appender.RollingFile = org.apache.log4j.RollingFileAppender
log4j.appender.RollingFile.File = C://log4.log
log4j.appender.RollingFile.MaxFileSize=1KB
log4j.appender.RollingFile.MaxBackupIndex=3
log4j.appender.RollingFile.layout = org.apache.log4j.PatternLayout
log4j.appender.RollingFile.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n
MaxFileSize 是日誌檔案的最大尺寸;
MaxBackupIndex是日誌檔案的個數,假如超過了,則覆蓋,主要考慮到的是硬碟的容量問題;
四、layout 日誌資訊格式
Log4j提供的layout有以下幾種:
- org.apache.log4j.HTMLLayout(以HTML表格形式佈局)
- org.apache.log4j.PatternLayout(可以靈活地指定佈局模式)
- org.apache.log4j.SimpleLayout(包含日誌資訊的級別和資訊字串)
- org.apache.log4j.TTCCLayout(包含日誌產生的時間、執行緒、類別等等資訊)
PatternLayout是我們以後推薦使用的,很靈活;
有個ConversionPattern屬性,靈活配置輸出屬性:
%m 輸出程式碼中指定的訊息;
%M 輸出列印該條日誌的方法名;
%p 輸出優先順序,即DEBUG,INFO,WARN,ERROR,FATAL;
%r 輸出自應用啟動到輸出該log資訊耗費的毫秒數;
%c 輸出所屬的類目,通常就是所在類的全名;
%t 輸出產生該日誌事件的執行緒名;
%n 輸出一個回車換行符,Windows平臺為”rn”,Unix平臺為”n”;
%d 輸出日誌時間點的日期或時間,預設格式為ISO8601,也可以在其後指定格式,比如:%d{yyyy-MM-dd HH:mm:ss,SSS},輸出類似:2002-10-18 22:10:28,921;
%l 輸出日誌事件的發生位置,及在程式碼中的行數;
五、Threshold屬性指定輸出等級
Threshold屬性可以指定日誌level ,比如我們指定某個appender的Threshold為WARN,那這個appender輸出的日誌資訊就是WARN級別以及WARN以上的級別;假如我們指定的是ERROR,那這個就輸出ERROR或者FATAL日誌資訊;
當然這裡有個提前 rootLogger裡配置的level必須小於Threshold層級 否則無效 還是按照總的rootLogger裡的level來輸出,一般我們實際實用的話 rootLogger裡配置DEBUG,然後某個檔案專門儲存ERRO日誌,就配置下Threshold為ERROR。
log4j.rootLogger=DEBUG, Console ,DFile ,EFILE
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.TTCCLayout
#DEBUGFile
log4j.appender.DFile = org.apache.log4j.FileAppender
log4j.appender.DFile.File = C://DEBUG.log
log4j.appender.DFile.layout = org.apache.log4j.PatternLayout
log4j.appender.DFile.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n
log4j.appender.DFile.Threshold = DEBUG
#ERRORFile
log4j.appender.EFILE = org.apache.log4j.FileAppender
log4j.appender.EFILE.File = C://ERROR.log
log4j.appender.EFILE.layout = org.apache.log4j.PatternLayout
log4j.appender.EFILE.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n
log4j.appender.EFILE.Threshold = ERROR
rootLogger裡配置DEBUG,
DFile的Threshold 配置為DEBUG ,輸出debug以上級別的資訊
EFILE的Threshold 配置為ERROR, 輸出error 以上級別的資訊
六 、Append 屬性指定是否追加內容
Log4j預設是不斷的把日誌內容追加到日誌檔案,這裡就有個屬性 Append 預設就是true,假如我們設定成false 就不追加了, 直接覆蓋前面的內容;
log4j.rootLogger=DEBUG, Console ,FIEL
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.TTCCLayout
#FIEL
log4j.appender.FIEL = org.apache.log4j.FileAppender
log4j.appender.FIEL.File = C://log.log
log4j.appender.FIEL.layout = org.apache.log4j.PatternLayout
log4j.appender.FIEL.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n
log4j.appender.FIEL.Append = false