天天看點

Log4j 的配置

上一章介紹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