和大多數配置檔案一樣,log4j配置檔案也有key-value形式和xml形式。這裡主要記錄一下key-value的形式
我們通過配置,可以建立出Log4j的運作環境。Log4j由三個重要的元件構成:日志資訊的優先級,日志資訊的輸出目的地,日志資訊的輸出格式。
一、直接看一個配置檔案(log4j.properties)
# 配置根log,第一個參數為你想要輸出的日志的等級,後面的是自定義的輸出源(appender)
log4j.rootLogger = debug,console,I,E
### 這裡定義第一個輸出源的相關資訊
#輸出源console輸出到控制台
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
#日志格式輸出方式,選着這種方式需要自定義格式
log4j.appender.console.layout = org.apache.log4j.PatternLayout
#自定義格式
log4j.appender.console.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
### 輸出INFO級别的日志資訊到G://PetLoveWorkSpace//ZRJCashVip//logs/info.log
# I 是第二個輸出源
log4j.appender.I = org.apache.log4j.DailyRollingFileAppender
log4j.appender.I.File = G://PetLoveWorkSpace//ZRJCashVip//logs/info.log
log4j.appender.I.Append = true
# 這裡可以配置本輸出源列印的級别
log4j.appender.I.Threshold = INFO
log4j.appender.I.layout = org.apache.log4j.PatternLayout
log4j.appender.I.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
### print error to = E://logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =G://PetLoveWorkSpace//ZRJCashVip//logs/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
這裡配置,所有日志将會在控制台輸出。另外,INFO級别的日志還會列印到info.log檔案。ERROR級别的日志列印到error.log
二、log4j配置檔案詳解
1、log4j.rootLogger = debug,console,I,E
這裡:log4j.rootLogger=日志級别,appender1, appender2, ….
- 日志級别:all < debug < info < warn < error < fatal < off
- rootLogger預設是對整個工程生效,如果隻想對某些包操作,那麼:log4j.logger.com.service=info, appender1, appender2, ….表示該日志對package com.service生效
2、log4j.appender.I = org.apache.log4j.DailyRollingFileAppender
這裡:log4j.appender.appender1=org.apache.log4j.日志輸出的地方
- ConsoleAppender(控制台)
- FileAppender(檔案)
- DailyRollingFileAppender(每天産生一個日志檔案,例如上面這個語句)
- RollingFileAppender(檔案大小到達指定尺寸時産生一個新的檔案)
- WriteAppender(将日志資訊以流格式發送到任意指定的地方)
- JDBCAppender(将日志資訊儲存到資料庫中)
3、log4j.appender.I.File = G://PetLoveWorkSpace//ZRJCashVip//logs/info.log
這裡: log4j.appender.appender1.File = 日志檔案儲存的地方
4、log4j.appender.I.Threshold = INFO
這裡:根據日志别來列印,appender I 的級别是info,那麼所有info級别的日志都将列印到appender I 指定的地方(一般是檔案中嘛),比如,我上面配置檔案中指定appender I 列印到info.log裡。
這一條很有用,用這樣的方法我們可以将error級别的之日資訊單獨列印到一個檔案裡,定位問題的時候就省去了再一堆日志檔案裡慢慢找錯誤資訊的麻煩了。
5、log4j.appender.I.layout = org.apache.log4j.PatternLayout
這裡:log4j.appender.appender1.layout=org.apache.log4j.日志布局格式
所謂的日志布局格式,就是指列印出來的日志适合什麼樣子的。
- HTMLLayout(以HTML表格形式布局)
- SimpleLayout(包含日志資訊的級别和資訊字元串)
- TTCCLayout(包含日志産生的時間,執行緒,類别等資訊)
- PatternLayout(可以靈活的指定布局格式,常用)
這裡的例子使用了最後一個,這種靈活指定的布局格式我們需要加上第六條,顯示指定列印的具體格式。其他三條,可以試試就知道是什麼樣的了。
6、log4j.appender.I.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
這裡:log4j.appender.appender1.layout.ConversionPattern=日志輸出格式。
日志輸出格式是自己指定的,具體這些符号代表什麼意思如下:
- %d 輸出日志時間點的日期或時間,預設格式為ISO8601,也可以在其後指定格式,比如:%d{yyy-M-dd HH:mm:ss },輸出類似:2002-10-18- 22:10:28
- %t 輸出産生該日志事件的線程名
- %r 輸出自應用啟動到輸出該日志資訊所耗費的毫秒數
- %p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL。如果是調用debug()輸出的,則為DEBUG,依此類推
- %n 輸出一個回車換行符,Windows平台為“rn”,Unix平台為“n”。
- %m 輸出代碼中指定的資訊,如log(message)中的message
- %l 輸出日志事件的發生位置,即輸出日志資訊的語句處于它所在的類的第幾行
- %f 輸出日志資訊所屬的類的類名
- %c 輸出日志資訊所屬的類的全名
7、log4j.appender.I.Append = true
意思是在日志檔案後追加。
三、關于log4j的應用,
1.得到記錄器
使用Log4j,第一步就是擷取日志記錄器,這個記錄器将負責控制日志資訊。其文法為:
public static Logger getLogger( String name)
通過指定的名字獲得記錄器,如果必要的話,則為這個名字建立一個新的記錄器。Name一般取本類的名字,比如:
static Logger logger = Logger.getLogger ( TestLog.class.getName () )
2.讀取配置檔案
當獲得了日志記錄器之後,第二步将配置Log4j環境.這裡根據應用來配置加載log配置檔案。
3、插入日志資訊
就是在相應的業務邏輯處調用日志記錄器,使用不同優先級别的日志記錄語句插入到想記錄日志的地方。
private static Logger logger = Logger.getLogger(TestLog.class);
logger.debug ( Object message ) ;
logger.info ( Object message ) ;
logger.warn ( Object message ) ;
logger.error ( Object message ) ;
具體使用方式比較簡單,但是做好日志的記錄方式,和列印内容還是很難的,好的日志記錄,是對于排查系統的錯誤與異常很有幫助的。
要是列印的日志在系統出問題時幫不上任何忙,要它何用。
關于如何做好日志記錄,我還任重道遠,可以參考:http://www.cnblogs.com/rollenholt/p/5392338.html
By--- Gonjan
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,