Log4j的配置

在啓用日誌記錄之前,你必須先配置log4j。配置Log4j意味着增加appender(destinations/targets/handlers)類別(logger)和分配每個appender佈局(格式化程序)。

類別可以在任何順序創建和配置。特別是,一個類別將找到並鏈接到它的後代即使是實例化。

您還可以配置類別以編程方式登錄到特定appender使用類別對象的addAppender()方法。添加多達你想要(或者如果你不沒有)。這種方法通常不推薦,因爲它涉及到更改源代碼並重新編譯它。更好的方法是使用外部配置文件如Java屬性文件或XML文件。

注意,輸出源不是單獨,他們是附加的!一個類別繼承其祖先的所有輸出源(默認)。如果你添加一個appender類別和它寫入相同的底層流(控制檯,相同的文件等)作爲其他appender,兩次相同的日誌消息將出現在日誌(或更多)。此外,如果兩個類別層次結構配置使用相同的appender名字,Log4j appender會寫兩次。使用cat.setAdditivity(false)類別禁用繼承的輸出源。然後,日誌消息只會被髮送到輸出源專門配置的那一類。

調用靜態方法BasicConfigurator.configure()方法配置log4j日誌控制檯就像一個system.out.println(…)聲明。這個方法是硬連接添加到根類別ConsoleAppender打印在控制檯上。輸出將被格式化的模式使用一套PatternLayout % 4 r(t %)% 5 p c % x - % m % n %。通常是不需要使用log4j的屬性文件,這樣會更簡單,更靈活。

默認配置log4j是log4j.properties的文件。把它在應用程序類路徑中。使用一個靜態的PropertyConfigurator.configure(…)方法來從Java屬性文件讀取配置信息。現有的配置既不清理也不重置。爲此,調用靜態BasicConfigurator.resetConfiguration()方法之前調用該方法。這有可能使長期代碼管理更加複雜。使用者應堅持一個log4j.properties在每個應用程序的根目錄 。

一個log4j配置文件示例

# Set root category priority to DEBUG and set its only appender to A1
log4j.rootCategory=DEBUG, A1

# A1 is set to be a ConsoleAppender (writes to system console).
log4j.appender.A1=org.apache.log4j.ConsoleAppender

# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

這個樣例文件配置log4j以完全相同的方式作爲BasicConfigurator.configure()方法。但這種方式,你可以稍後改變,例如,debug到fatal的屬性文件,不需要重新編譯任何Java代碼!

另一個更復雜的log4j配置文件

#### Use two appenders, one to log to console, another to log to a file
log4j.rootCategory=debug, stdout, R

# Print only messages of priority WARN or higher for your category
log4j.category.your.category.name=WARN
# Specifically inherit the priority level
#log4j.category.your.category.name=INHERITED

#### First appender writes to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

#### Second appender writes to a file
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log

# Control the maximum log file size
log4j.appender.R.MaxFileSize=100KB
# Archive log files (one backup file here)
log4j.appender.R.MaxBackupIndex=1

log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

在這裏,輸出也將被加到example.log日誌文件。這個文件將在滾時達到100 kb。當發生翻轉時,舊example.log日誌將自動轉移到example.log.1。也可用DailyRollingFileAppender滾日誌文件用每一分鐘,小時,天,周,月或每天的方式。

長期運行的項目,如服務器、使用configureAndWatch(字符串configFilename,長delay_in_milliseconds)配置使用Java屬性文件。Log4j將每一毫秒繼續監控屬性文件的任何更改,如果文件更改,Log4j將更新配置 。

當代碼轉移到生產環境,爲了達到快速的性能,您可以禁用日誌級別等於或低於某一層次結構中的所有類別。例如,不記錄任何日誌,指定log.disable=FATAL在配置屬性文件中。

唯一的例外是如果log.disableOverride屬性沒有設置爲false。因此,系統管理員(暫時)可以指定log.disableOverride = true在配置文件覆蓋log.disable屬性和排除一些禁用屬性和記錄所有消息.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章