Java - How to set Log4j properties for specific class

基本上,我們在建構一個系統時,通常都會輸出必要的資訊至log file內,而做這個輸出動作

如果要做的多元一點的話,可以使用外部的library log4j,透過一個設定檔來自訂日期輸出

格式、輸出的資訊等級、輸出log file的路徑等等。

本文主要是探討,如何使用log4j來針對單一某個java class檔做輸出資訊,一般情況應該都

是一個Web內所有的class通吃一種格式,並且輸出至同一個log檔,不過由於需求要開闢一支

單獨的java程式來給windows排程工作執行自動發送mail的動作,由於執行路徑的問題,因此

若沿用原本的log設定會額外建一個log檔至其他目錄,因此乾脆自行定義一個新的log設定,

單單針對這支程式,並輸出至指定的另外一個位置。

log4j property設定檔如下:
log4j.rootLogger=INFO, A1, A3
##log4j.rootLogger=ERROR, A1, A3


# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern= %-5p[%d{yyyy-MM-dd HH:mm:ss}] %F:%L - %m%n


log4j.appender.A3=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A3.File=../logs/Web.log
log4j.appender.A3.DatePattern=.yyyy-MM-dd
#log4j.appender.A3.Threshold=ERROR
log4j.appender.A3.layout=org.apache.log4j.PatternLayout
log4j.appender.A3.layout.ConversionPattern= %-5p[%d{yyyy-MM-dd HH:mm:ss}] %F:%L - %m%n

A1, A3本身一個是在console輸出,一個是Web log檔的輸出,若我們要單單針對一個class檔

來自訂的話,如下:

log4j.logger.com.mail.SysAutoSendMail=INFO, mailAppender
log4j.additivity.com.mail.SysAutoSendMail=false
log4j.appender.mailAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.mailAppender.File=C:/logs/Mail.log
log4j.appender.mailAppender.DatePattern=.yyyy-MM-dd
#log4j.appender.A3.Threshold=ERROR
log4j.appender.mailAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.mailAppender.layout.ConversionPattern= %-5p[%d{yyyy-MM-dd HH:mm:ss}] %F:%L - %m%n

首先我的class的package路徑為com.mail.SysAutoSendMail

另外,log4j.additivity.com.mail.SysAutoSendMail=false,需設為false,如此一來

com.mail.SysAutoSendMail下產生的log info就不會append進A3的log file內了!

PS. 在此不針對log4j的相關設定進行探討,若有興趣google一下應該有一堆教學了XD

留言