1. 程式人生 > >【日誌】log4j的使用配置與引數解析

【日誌】log4j的使用配置與引數解析

一、Log4j簡介

1.log4j由三個重要元件構成:日誌資訊的優先順序,日誌資訊的輸出目的地,日誌資訊的輸出格式。
2.優先順序(level)從高到低有:ERROR,WARN,INFO,DEBUG。
3.輸出目的地可以是:控制檯,檔案,GUI元件,甚至是套介面伺服器,NT的事件記錄器,UNIX Syslog守護程序等;log4j配置檔案實現了輸出到控制檯、檔案、回滾檔案、傳送日誌郵件、輸出到資料庫日誌表、自定義標籤等功能。
4.log4j支援兩種配置檔案格式:XML格式與properties格式。

二、配置方式:

\#配置根Logger
log4j.rootLogger = [level],A1(appenderName),A2,...
\#配置日誌資訊輸出目的地Appender
log4j.appender.A1=fully.qualified.name.of.appender.class
log4j.appender.A1.option1=value1
log4j.appender.A1.optionN=valueN
\#配置日誌資訊格式(佈局)
log4j.appender.A1.layout=fully.qualified.name.of.layout.class
log4j.appender.A1.layout.option1=value1
log4j.appender.A1.layout.optionn=valueN

Appender為日誌輸出目的地,log4j提供的appender有:
org.apache.log4j.ConsoleAppender(控制檯)
org.apache.log4j.FileAppender(檔案)
org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌檔案)
org.apache.log4j.RollingFileAppender(檔案大小到達指定尺寸的時候產生一個新的檔案)
org.apache.log4j.WriteAppender(將日誌資訊以流格式傳送到任意指定的地方)

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

列印引數:log4j採用類似c語言中的printf函式的列印格式格式化日誌資訊,如下:
%m 輸出程式碼中指定的訊息
%p 輸出優先順序(level)
%r 輸出自應用啟動到輸出該log資訊耗費的毫秒數
%c 輸出日誌資訊所屬的類目,通常就是所在類的全名
%t 輸出產生該日誌事件的執行緒名
%l 輸出日誌事件發生的位置,相當於%c.%M(%F:%L)的組合,包括類名、發生的執行緒,以及在程式碼中的行號:如Testlog4.main(TestLog4.java:10)
%F 輸出日誌訊息所產生時所在的檔名稱
%n 輸出一個回車換行符,windows平臺為\r\n,Unix平臺為\n
%d 輸出日期時間點的日期和時間,預設格式為ISO08601,也可以在其後指定格式,比如:
%d{yyyy MMM dd HH:mm:ss SSS}
%L 輸出程式碼中的行號
%x 輸出和當前執行緒相關的NDC(巢狀診斷環境),尤其用到像java servlets這樣的多客戶多執行緒的應用。

可以在%與模式字元之間加上修飾符來控制最小寬度、最大寬度、文字對齊方式
%20c:輸出類名,最小寬度20,如果類名小於20,預設為右對齊。20前面加“-”是左對齊
%.30 輸出類名,如果類名>30 會將左邊多出的字串截掉
%20.30c :如果類名小於20就補空格,大於30,截去左邊字元。

各選項都有的屬性
Threshold=WARN:指定日誌訊息的輸出最低層次
ImmediateFlush=true:預設值是true,意味著所有的訊息都會被立即輸出
1)ConsoleAppender選項:
Target=System.err:預設情況下:System.out,指定輸出控制檯
2)FileAppender選項
File=mylog.txt:指定訊息輸出到mylog.txt檔案中
可指定絕對路徑和根據系統屬性變數來指定相對路徑,如${user.dir}/logs/ws_02_app.log 就是在tomcat下的log中生成日誌檔案。
Append=false:預設值是true,即將訊息增加到指定檔案中,false指將訊息覆蓋指定的檔案內容。
3)DailyRollingFileAppender
File,Append
DatePattern=’.’yyyy-ww:每週滾動一次檔案,即每週產生一個新的檔案。當然也可以指定按月、周、天、時和分。即對應的格式如下:
‘.’yyyy-MM:每月
‘.’yyyy-ww:每週
‘.’yyyy-MM-dd:每天
‘.’yyyy-MM-dd-a:每天兩次
‘.’yyyy-MM-dd-HH:每天
‘.’yyyy-MM-dd-HH-mm:每分鐘
4)RollingFileAppender選項
File,Append
MaxFileSize=10kb:字尾可以是kb,Mb或者是GB。在日誌檔案達到該大小時,將會自動滾動,即將原來的內容移到my.log.1檔案中。
MaxBackupIndex=2:指定可以產生的滾動檔案的最大數,預設為1

三、在程式中的使用

1)使用之前:匯入commons-logging.jar,log4j.jar,將log4j.properties放到src目錄下。
2)得到記錄器:
使用log4j,第一步就是獲取日誌記錄器,它將負責控制日誌資訊。
語法為:public static Logger getLogger(String name);
推薦使用commons-logging結合log4j進行日誌記錄
private static Log logger = LogFactory.getLog(YourClass.class);
3)插入記錄資訊(格式化日誌資訊)
使用語法:
logger.debug(Object message); .info(..);.warn(…);.error(…);

四、log4j比較全面的配置

Java程式碼
log4j.rootLogger=DEBUG,CONSOLE,A1,im
log4j.addivity.org.apache=true
#應用於控制檯
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=DEBUG
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.conversionPattern=[framework] %d %c -%-4r [%t]其中framework可以替換成任意資訊