1. 程式人生 > >log4j之log4j.properties引數詳解(log4j各個配置引數含義)

log4j之log4j.properties引數詳解(log4j各個配置引數含義)

====>log4j之log4j.properties引數詳解

====>log4j介紹:

Log4j是Apache的一個開源專案,通過使用Log4j,我們可以控制日誌資訊輸送的目的地是控制檯、檔案、GUI元件,甚至是套介面伺服器、NT的事件記錄器、UNIX Syslog守護程序等;我們也可以控制每一條日誌的輸出格式;通過定義每一條日誌資訊的級別,我們能夠更加細緻地控制日誌的生成過程。最令人感興趣的就是,這些可以通過一個配置檔案來靈活地進行配置,而不需要修改應用的程式碼。

為什麼使用log4j輸出日誌

(1) 通過修改配置檔案,就可以決定log資訊的目的地——控制檯、檔案、GUI元件、甚至是套介面伺服器、NT的事件記錄器、UNIX Syslog守護程序等。

(2) 通過修改配置檔案,可以定義每一條日誌資訊的級別,從而控制是否輸出。在系統開發階段可以列印詳細的log資訊以跟蹤系統執行情況,而在系統穩定後可以關閉log輸出,從而在能跟蹤系統執行情況的同時,又減少了垃圾程式碼(System.out.println(……)等)。

(3) 使用log4j,需要整個系統有一個統一的log機制,有利於系統的規劃。

配置引數說明:

1、八種輸出級別

  • OFF:關閉所有日誌資訊
  • FATAL:嚴重錯誤 主要是程式的錯誤,不可修復,程式已經到達不可執行程度
  • ERROR:錯誤 程式的錯誤,可以修復,但程式執行中可能會發生不可恢復的嚴重錯誤
  • WARN:
    警告,程式有錯誤,只做警告動作,程式依然可以正常執行
  • INFO:要輸出的資訊,顯示給程式使用者
  • DEBUG:輸出程式執行時資訊,以便更好的除錯
  • TRACE:比DEBUG更細粒度的事件資訊
  • ALL:開啟所有日誌資訊
以上八種日誌級別從上到下依次由高到低排序,但是log4j建議使用ERROR、WARN、INFO、DEBUG四個級別,當然了,除此之外,自己也可以定義其他級別,但是開發當中基本的幾個級別已經可以滿足需求。

2、五種日誌資訊輸出目標

  • org.apache.log4j.ConsoleAppender輸出到控制檯
  • org.apache.log4j.FileAppender
    輸出到檔案
  • org.apache.log4j.DailyRollingFileAppender每天產生一個日誌檔案
  • org.apache.log4j.RollingFileAppender限定日誌檔案大小,檔案大小到達指定尺寸的時候產生一個新的檔案
  • org.apache.log4j.WriterAppender將日誌資訊以流格式傳送到任意指定的地方

3、四種配置日誌資訊的格式

  • org.apache.log4j.HTMLLayout:以HTML表格形式佈局
  • org.apache.log4j.PatternLayout:可以靈活地指定佈局模式
  • org.apache.log4j.SimpleLayout:包含日誌資訊的級別和資訊字串
  • org.apache.log4j.TTCCLayout:包含日誌產生的時間、執行緒、類別等等資訊

4、控制檯選項

  • Threshold=DEBUG:指定日誌訊息的輸出最低層次
  • ImmediateFlush=true:預設值是true,意謂著所有的訊息都會被立即輸出
  • Target=System.err:預設情況下是:System.out,指定輸出控制檯
  • Threshold=DEBUF:指定日誌訊息的輸出最低層次
  • File=mylog.txt:指定訊息輸出到mylog.txt檔案
  • Append=false:預設值是true,即將訊息增加到指定檔案中,false指將訊息覆蓋指定的檔案內容
  • MaxFileSize=100KB:字尾可以是KB, MB 或者是 GB. 在日誌檔案到達該大小時,將會自動滾動,即將原來的內容移到mylog.log.1檔案
  • MaxBackupIndex=2:指定可以產生的滾動檔案的最大數
  • log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n:自定義輸出格式
4.1、日誌資訊格式中幾個符號所代表的含義:

-X: X資訊輸出時左對齊
%p: 輸出日誌資訊優先順序,即DEBUG,INFO,WARN,ERROR,FATAL
%d:輸出日誌時間點的日期或時間,預設格式為ISO8601,也可以在其後指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921
%r:輸出自應用啟動到輸出該log資訊耗費的毫秒數
%c:輸出日誌資訊所屬的類目,通常就是所在類的全名
%t: 輸出產生該日誌事件的執行緒名
%l: 輸出日誌事件的發生位置,相當於%C.%M(%F:%L)的組合,包括類目名、發生的執行緒,以及在程式碼中的行數。舉例:Testlog4.main (TestLog4.java:10)
%x: 輸出和當前執行緒相關聯的NDC(巢狀診斷環境),尤其用到像java servlets這樣的多客戶多執行緒的應用中。
%%: 輸出一個"%"字元
%F: 輸出日誌訊息產生時所在的檔名稱
%L: 輸出程式碼中的行號
%m: 輸出程式碼中指定的訊息,產生的日誌具體資訊
%n:輸出一個回車換行符,Windows平臺為"\r\n",Unix平臺為"\n"輸出日誌資訊換行

4.2、可以在%與模式字元之間加上修飾符來控制其最小寬度、最大寬度、和文字的對齊方式。如:

1)%20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小於20的話,預設的情況下右對齊
2)%-20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小於20的話,"-"號指定左對齊
3)%.30c:指定輸出category的名稱,最大的寬度是30,如果category的名稱大於30的話,就會將左邊多出的字元截掉,但小於30的話也不會有空格
4)%20.30c:如果category的名稱小於20就補空格,並且右對齊,如果其名稱長於30字元,就從左邊較遠輸出的字元截掉

5、幾個常用配置:

A1–列印到螢幕上

log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-5p [%t] %37c %3x - %m%n

A2–列印到檔案DAOLog中–專門為DAO層服務

log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A2.file=DAOLog
log4j.appender.A2.DatePattern=’.’yyyy-MM-dd
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

A3–列印到檔案BusinessLog中–專門記錄邏輯處理層服務log資訊

log4j.appender.A3=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A3.file=BusinessLog
log4j.appender.A3.DatePattern=’.’yyyy-MM-dd
log4j.appender.A3.layout=org.apache.log4j.PatternLayout
log4j.appender.A3.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

A4–列印到檔案alllog中–記錄所有log資訊

log4j.appender.A4=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A4.file=alllog
log4j.appender.A4.DatePattern=’.’yyyy-MM-dd
log4j.appender.A4.layout=org.apache.log4j.PatternLayout
log4j.appender.A4.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

Appender的使用

log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A2.file=demo
log4j.appender.A2.DatePattern=’.’yyyy-MM-dd
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%m%n

Layout的配置

log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

總結:

為什麼這麼多人都在使用log4j?Because:

1)很明顯我們在編寫程式碼的時候有各種需要列印日誌的需求,比如:我們除錯程式碼的時候;我們的應用出現了問題,我們分析、定位、解決問題的時候;我們想將某些日誌資訊作為離線的業務資料分析的時候等等

2)最簡單的列印日誌的方式就是使用系統本身的輸出語句,不過對於大多數需求這種方式都是不能滿足的

3)於是我們的目光可能會向編寫一個專門列印日誌資訊的工具類轉移,不過有人更近了一步,寫出了一個日誌框架供我們使用

4)使用日誌框架的好處顯而易見,方便、自在、功能強大能夠滿足各種需求,不好的地方也是有的,比如:如果你也進行了試驗你會發現,程式變慢了,需要一定的時間和精力作為學習的成本

5)日誌框架都是能控制什麼哪?那我們需要列印的日誌都能滿足什麼樣的需求哪?通常我們希望一個日誌框架能夠靈活的做到以下三點:

①:能夠控制日誌資訊想往哪裡打就往哪裡打,比如:控制檯、檔案、郵箱、資料庫等等

②:能夠控制日誌資訊想怎麼打就怎麼打,比如:我想要列印時間、程式的名稱、程式的方法名、程式的行號、執行緒的名稱等等

③:能夠控制日誌資訊想打什麼打什麼,不想打的就不打,日誌資訊是分級別的,有時候我只想看錯誤的資訊或者警告的資訊,有時候我想看到所有的資訊我想除錯程式等等

6)有這麼一個工具,尤其是當程式出現問題的時候,專案負責人讓你趕緊解決問題,這時候有一份日誌檔案可供分析,一定好過各種猜測,程式設計之中沒有偶然性,輸入對應必然輸出結果!

以上內容僅供參考和學習 ———– 如有雷同,純屬意外……