log4j的基本原理

先看一個log4j.properies配置文件

————————————————————我是強大的分割線—————————————————————————
#定義輸出級別和輸出平臺 
log4j.rootLogger=INFO,stdout,fileout 
#設定stdout輸出平臺 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=[%-5p][%d{yyyy-MM-dd HH:mm:ss}][%l]:%m%n 
#每天一個日誌文件 
log4j.appender.fileout=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.fileout.File=test.log 
log4j.appender.fileout.layout=org.apache.log4j.PatternLayout 
log4j.appender.fileout.layout.ConversionPattern=[%-5p][%d{yyyy-MM-dd HH:mm:ss}][%l]:%m%n 
#對不同的package定義不同的輸出級別 
log4j.logger.com.daniel.test=DEBUG 
————————————————————我是強大的分割線—————————————————————————

運行時控制檯會輸出,自己去測試。
另外一個輸出在文件test.log 

分析:log4j.properies定義一般分3部分: 
log4j.rootLogger(必須)、log4j.appender(必須)、log4j.logger(不必須) 
————————————————————我是強大的分割線—————————————————————————
1、log4j.rootLogger 
這個配置是必須的,它的定義格式: 

log4j.rootLogger = level , appenderName, appenderName, … 

lelve是定義的輸出級別,低於該級別的將不會輸出,主要級別有OFF、ALL、FATAL、ERROR、WARN、INFO、DEBUG或自定義級別,其中OFF設定的話將不輸出任何信息,ALL設定的話將輸出所有信息;另外5個的級別FATAL>ERROR>WARN>INFO>DEBUG,如果你的lenel設定爲INFO,那麼不能輸出DEBUG信息; 

appenderName是指定日誌信息輸出到哪個地方,控制檯,文件等等,可同時指定多個輸出目的地。 
————————————————————我是強大的分割線—————————————————————————
2、log4j.appender 
這個也是必須配置的,它是負責控制日誌記錄操作的輸出。它的定義格式如下: 

log4j.appender.appenderName=someAppender(選擇一種輸出平臺) 
[log4j.appender.appenderName.File=文件名](文件輸出定義路徑) 
log4j.appender.appenderName.layout=輸出佈局 
log4j.appender.appenderName.layout.ConversionPattern=輸出格式 

log4j.appender.appenderName指定輸出appender,Log4J提供了一下幾種appender: 

a),org.apache.log4j.ConsoleAppender(控制檯) 
b),org.apache.log4j.FileAppender(文件) 
c),org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌文件) 
d),org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件,可通過log4j.appender.R.MaxFileSize=100KB設置文件大小,還可通過log4j.appender.R.MaxBackupIndex=1設置爲保存一個備份文件)。 
e),org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任意指定的地方) 

log4j.appender.appenderName.layout指定日誌信息的格式(佈局)Layout,它負責格式化Appender的輸出。Log4j提供的layout有以下幾種: 

org.apache.log4j.HTMLLayout(以HTML表格形式佈局) 
org.apache.log4j.PatternLayout(可以靈活地指定佈局模式) 
org.apache.log4j.SimpleLayout(包含日誌信息的級別和信息字符串) 
org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程、類別等等信息)。 

log4j.appender.appenderName.layout.ConversionPattern格式化日誌信息,Log4J採用類似C語言中的printf函數的打印格式格式化日誌信息,打印參數如下: 

%m 輸出代碼中指定的消息 
%p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL 
%r 輸出自應用啓動到輸出該log信息耗費的毫秒數 
%c 輸出所屬的類目,通常就是所在類的全名 
%t 輸出產生該日誌事件的線程名 
%n 輸出一個回車換行符,Windows平臺爲“rn”,Unix平臺爲“n” 
%d 輸出日誌時間點的日期或時間,默認格式爲ISO8601,也可以在其後指定格式,比如:%d{yyyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921 
%l 輸出日誌事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。 
————————————————————我是強大的分割線—————————————————————————
3,log4j.logger 
這個不是必需的,如果不配置這個,則採用log4j.rootLogger的level級別。它主要是具體到package、Class級別的info,它的定義格式如下: 

log4j.logger.packageName[.ClassName]=level[,appender] 

它也可以輸出到指定的appender,也可以不指定輸出到默認appender。 
————————————————————我是強大的分割線—————————————————————————
4,log4j的使用 
a)、從www.apache.org下載commongs-logging包; 
b)、在你的class裏面定義protected final Log logger = LogFactory.getLog(this.getClass()); 
c)、在需要日誌輸出的地方logger.info(...),logger.error(...),logger.debug(...),....注意,在使用時前最好做個判斷if (logger.isDebugEnabled()){logger.debug("...");}其他類似。

d)、也可以使用log4j包中的類來定義logger: private static Logger logger = Logger.getLogger(UserDAOImpl.class); //這裏Logger.getLogger的參數建議寫所在類的名稱, 兩種方式: (1)this.getClass().getName(); (2)(class clazz)的方法, 如果在類UserDAOImpl中, 即(UserDAOImpl.class)

e)、在需要日誌輸出的地方logger.info(...),logger.error(...),logger.debug(...)

發佈了13 篇原創文章 · 獲贊 3 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章