Log4j配置之簡單教程
Log4j log for java(java的日誌) 是java主流的日誌框架,提供各種型別,各種儲存,各種格式,多樣化的日誌服務;
本人常用的就是在專案中用來記錄會發生錯誤的資訊,方便利於檢視錯誤問題,還有就是在爬蟲時,用來記錄排查爬資料時的錯誤資訊。
具體請參考Log4j百度百科 :https://baike.baidu.com/item/log4j/480673?fr=aladdin
Log4j基本配置;
根配置語法 :把指定級別的日誌資訊輸出到指定的一個或者多個位置 log4j.rootLogger=DEBUG, Console ,File #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
Log4j 根配置語法
log4j.rootLogger = [ INFO] , appenderName, stdout , R, … 把指定級別的日誌資訊輸出到指定的一個或者多個位置
(百科介紹)此句為將等級為INFO的日誌資訊輸出到stdout和R這兩個目的地,stdout和R的定義在下面的程式碼,可以任意起名。等級可分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL,如果配置OFF則不打出任何資訊,如果配置為INFO這樣只顯示INFO、WARN、ERROR的log資訊,而DEBUG資訊不會被顯示
Log4j根據日誌資訊的重要程度,分OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL 。當然再細分的話 還有 FATAL(嚴重錯誤),但是Log4j官方建議實際實用的話,Log4j建議只使用四個級別,優先順序從高到低分別是 ERROR、WARN、INFO、DEBUG
Log4j官方的Appender 為日誌輸出目的地,Log4j提供的appender有以下幾種:
org.apache.log4j.ConsoleAppender(控制檯), org.apache.log4j.FileAppender(檔案), org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌檔案), org.apache.log4j.RollingFileAppender(檔案大小到達指定尺寸的時候產生一個新的檔案), org.apache.log4j.WriterAppender(將日誌資訊以流格式傳送到任意指定的地方)
實際開發我們大多使用第1,3,4種實現
假如日誌資料量不是很大,我們可以用DailyRollingFileAppender 每天產生一個日誌,方便檢視;
假如日誌資料量很大,我們一般用RollingFileAppender,固定尺寸的日誌,假如超過了 就產生一個新的檔案;
下面給出專案中常用的四種log4j日誌配置:
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=5KB
log4j.appender.RollingFile.MaxBackupIndex=5
log4j.appender.RollingFile.layout = org.apache.log4j.PatternLayout
log4j.appender.RollingFile.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n
在配置RollingFile時有兩個新的配置項解釋下:
MaxFileSize 是日誌檔案的最大尺寸;根據實際需求來定 10KB 100KB也行
MaxBackupIndex是日誌檔案的個數,超過了該數量,則覆蓋,主要考慮時硬碟容量問題;根據實際需求來定 比如 100 500;
Log4j提供的Layout日誌輸出格式,有以下幾種:
org.apache.log4j.HTMLLayout(以HTML表格形式佈局),
org.apache.log4j.PatternLayout(可以靈活地指定佈局模式),
org.apache.log4j.SimpleLayout(包含日誌資訊的級別和資訊字串),
org.apache.log4j.TTCCLayout(包含日誌產生的時間、執行緒、類別等等資訊)
在真正使用的時候,我們最常用的還是PatternLayout輸出,它可以很靈活的進行指定我們想要的輸出格式,本人也比較喜歡使用:
Log4J中列印格式格式化日誌資訊,如下
%m 輸出程式碼中指定的訊息
%p 輸出優先順序,即DEBUG,INFO,WARN,ERROR,FATAL
%r 輸出自應用啟動到輸出該log資訊耗費的毫秒數
%c 輸出所屬的類目,通常就是所在類的全名
%t 輸出產生該日誌事件的執行緒名
%n 輸出一個回車換行符,Windows平臺為“\r\n”,Unix平臺為“\n”
%d 輸出日誌時間點的日期或時間,預設格式為ISO8601,也可以在其後指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},輸出類似:2002年10月18日 22 : 10 : 28 , 921
%l 輸出日誌事件的發生位置,包括類目名、發生的執行緒,以及在程式碼中的行數。舉例:Log4Test.main(Log4Test.java: 10 )
有時候我們需要把一些報錯ERROR日誌單獨存到指定檔案,這樣有利於我們方便檢視,排查錯誤 。這時候,Threshold屬性就派上用場了;Threshold屬性可以指定日誌level 。
Log4j根據日誌資訊的重要程度,分OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL
比如我們指定某個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,EFILE的Threshold 配置為ERROR,只輸入ERROR資訊;
有時候,不知道大家注沒注意到,在Log4j中預設是不斷的把日誌內容追加到日誌檔案;那是因為有個屬性 Append 預設就是true;
有時專案很大的時候,產生的日誌檔案也會很大,這個時候大家就可以吧Append,設定為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 = true 預設是為true的
log4j.appender.FIEL.Append = false
以上總結,並沒有貼入程式碼例子,可能有的人不理解,但是一般在專案中我們都是根據自己的意向,來定製自己需要的日誌檔案,這樣更好的便於自己的排查錯誤。
如果上面寫的不對或者沒有真正的解決你的需求,敬請諒解,本人也是在不斷地學習進步。在此謝謝大家的互相理解!!
如果這篇文章並沒有解決大家的問題,也可以參考以下文章:
https://blog.csdn.net/manmanxiaohui/article/details/79922546