和大多數配置文件一樣,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