上一章介紹log4j的核心元件。本章介紹如何使用配置檔案來配置這些核心元件。配置log4j涉及配置設定級别,定義追加程式,并在配置檔案中指定布局的對象。
Appenders:
Apache的log4j提供Appender對象主要負責列印日志消息到不同的目的地,如控制台,檔案,sockets,NT事件日志等等。每個Appender對象具有與之相關聯的不同的屬性,并且這些屬性表明對象的行為,常用屬性如下:
屬性 | 描述 |
layout | Appender使用布局Layout 對象和與之相關的格式化的日志記錄資訊轉換模式 |
target | 目标可以是一個控制台,一個檔案,或根據附加器的另一個項目 |
level | 級别是必需的,以控制日志消息的過濾 |
threshold | Appender可以有與之獨立的記錄器級别相關聯的級别門檻值水準。Appender忽略具有級别低于阈級别的任何日志消息 |
filter | Filter 對象可以分析超出級别的比對記錄資訊,并決定是否記錄的請求應該由一個特定 Appender 或忽略處理 |
根Logger
根logger主要定義log4j支援的日志級别及輸出目的地,其文法為:
log4j.rootLogger = [ level ] , appenderName, appenderName, …
其中,level 是日志記錄的優先級,分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定義的級别。
Level | |
ALL | 各級包括自定義級别 |
DEBUG | 指定細粒度資訊事件是最有用的應用程式調試 |
ERROR | 錯誤事件可能仍然允許應用程式繼續運作 |
FATAL | 指定非常嚴重的錯誤事件,這可能導緻應用程式中止 |
INFO | 指定能夠突出在粗粒度級别的應用程式運作情況的資訊的消息 |
OFF | 這是最高等級,為了關閉日志記錄 |
TRACE | 指定細粒度比DEBUG更低的資訊事件 |
WARN | 指定具有潛在危害的情況 |
建議隻使用四個級别,優先級從高到低分别是ERROR、WARN、INFO、DEBUG。
appenderName指定日志資訊輸出到哪個地方,可同時指定多個輸出目的地。
配置輸出目的地Appender
Appender主要定義日志資訊輸出在什麼位置,主要文法為:
log4j.appender.appenderName = classInfo
log4j.appender.appenderName.option1 = value1
…...
log4j.appender.appenderName.optionN = valueN
Log4j提供的appender有以下幾種:
•org.apache.log4j.ConsoleAppender(控制台),
•org.apache.log4j.FileAppender(檔案),
•org.apache.log4j.DailyRollingFileAppender(每天産生一個日志檔案),
•org.apache.log4j.RollingFileAppender(檔案大小到達指定尺寸的時候産生一個新的檔案)
•org.apache.log4j.WriterAppender(将日志資訊以流格式發送到任意指定的地方)
配置日志資訊的格式Layout
Layout 負責格式化Appender的輸出,其文法為:
log4j.appender.appenderName.layout = classInfo
log4j.appender.appenderName.layout.option1 = value1
…
log4j.appender.appenderName.layout.optionN = valueN
其中,Log4j提供的layout有以下幾種:
•org.apache.log4j.ConsoleAppender(控制台),
設定package輸出級别
可以設定不同package的日志輸出級别,文法為:
log4j.logger.packageName=level
其中,packageName為實際的包名,level為日志級别,例如:
log4j.logger.org.springframework=info
log4j.logger.org.apache.catalina=info
log4j.logger.org.apache.commons.digester.Digester=info
log4j.logger.org.apache.catalina.startup.TldConfig=info
log4j.logger.chb.test=debug
Log4j配置方式
通過上面的介紹,我們已經大概清楚了配置Log4j所需要的内容,Log4j可以通過java程式動态設定,該方式缺點是:如果需要修改日志輸出級别等資訊,則必須修改java檔案,然後重新編譯,很是麻煩。log4j也可以通過配置檔案的方式進行設定,目前支援兩種格式的配置檔案:
•properties檔案(推薦)
•xml檔案
以下是 log4j.properties 檔案的一個樣例文法:
# Define the root logger with appender X
log4j.rootLogger = DEBUG, X
# Set the appender named X to be a File appender
log4j.appender.X=org.apache.log4j.FileAppender
# Define the layout for X appender
log4j.appender.X.layout=org.apache.log4j.PatternLayout
log4j.appender.X.layout.conversionPattern=%m%n
使用上面的文法,我們定義 log4j.properties 檔案如下:
● 根日志記錄器(logger)的級别定義為DEBUG并連接配接附加器命名為FILE
● 附加器(appender)File是定義為org.apache.log4j.FileAppender并寫入到一個名為“log.out”位于日志log目錄下
● 定義的布局模式是%m%n,這意味着每列印日志消息之後,将加上一個換行符
# Define the root logger with appender file
log=D:/log4j
log4j.rootCategory=INFO, file
log4j.rootLogger = INFO,file
# Define the file appender
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=${log}/log.out
# Define the layout for file appender
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.conversionPattern=%m%n
再寫一個複雜點的,這個在實際項目中用的比較多
#設定等級和Appender。
log4j.rootLogger=debug,appender1,apppender2
#定義appender1屬性和布局
#附加器(appender) appender1定義為控制台輸出
log4j.appender. appender1= org.apache.log4j.ConsoleAppender
log4j.appender. appender1.layout=org.apache.log4j.PatternLayout
log4j.appender. appender1.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
#定義appender2屬性和布局
#appender2定義為檔案輸出
log4j.appender. appender2=org.apache.log4j.RollingFileAppender
log4j.appender.apppender2.File=example.log
log4j.appender.appender2.MaxFileSize=100KB
log4j.appenderappender2.MaxBackupIndex=1
log4j.appender.appender2.layout=org.apache.log4j.PatternLayout
log4j.appender.appender2.layout.ConversionPattern=%p %t %c - %m%n
#輸出日志的格式和資訊都是可配可選的。
參考:
http://zhaoyanblog.com/archives/167.html http://www.yiibai.com/log4j/log4j_configuration.html http://www.jb51.net/article/41001.htm