1. 程式人生 > >Log4j配置之簡單教程

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

https://blog.csdn.net/zhshulin/article/details/37937365