部落客廣告聯播

2007年5月23日 星期三

不只是System.out.print, 筆記: log4j

不只是System.out.print, 筆記: log4j

不管是使用什麼工具撰寫WebApplication,即使IDE提供或多或少的除錯及變數監看的能力,
但使用System.out.println()來尋找出錯誤似乎常有也是最簡單的除錯方式。
但問題就在於,開發階段寫了一堆System.out.print(),等到上線時,這些為了除錯所輸出的訊息,
可能會在螢幕顯示出許多不應該讓使用者知道的資訊,造成安全上的問題,亦或者是這些輸出被container
(如tomcat)寫到檔案去了,造成不必要的儲存空間浪費。

log4j提供了紀錄資訊的一整套framework,透過debug()、info()、warn()、error()、fatal()五層級及
log4j的設定檔,可以設定將某層級及以下層級的訊息關閉輸出。
此外透過appender可將訊息單存輸出到console或轉輸出到file或database中。

1. Logger --> 接收訊息的紀錄器
Logger為階層式。最上層Logger為RootLogger。 ==> Logger.getRootLogger();
通常都會各自class建立Logger。 ==> Logger lg=Logger.getLogger(this.getClass());

2. Appender --> 執行將Logger的訊息寫入特定目的
八種Appender:
a. ConsoleAppender
b. FileAppender
c. RollingFileAppender --> 達某大小後,會rotate
d. DailyRollingFileAppender --> 每天固定rotate
e. JDBCAppender --> 資料庫
f. NTEventLogAppender --> windows only
g. SMTPAppender --> mail
h. SocketAppender

3. Layout --> 用來格式化在Logger裡的訊息
Layout中可用的變數:
a. %c -->logger的名稱
b. %d -->日期與時間
c. %m -->訊息
d. %n -->換行(平台無關)
e. %p -->訊息所屬層級(五層級之一)
f. %t -->thread名稱
g. %% -->百分比符號(跳脫字元)
h. %C -->class名稱
i. %F -->檔名
j. %L -->行號

上列 %x 兩字元中可插入:
a. - -->向左對齊
b. m -->最大長度
c. n -->最小長度

%d後可接{simpleDateFormat字串}來指定要使用的日期格式。

範例:
%-50m%n --> 向左對齊,最大長度為50字
%d{yyyy/MM/dd}

4. 設定檔log4j.properties要放在class path中。
5. log4j.prooerties範例:
log4j.rootLogger=Info,appConsole
log4j.appender.appConsole=org.apache.log4j.ConsoleAppender
log4j.appender.appConsole.layout=org.apache.log4j.PatternLayout
log4j.appender.appConsole.layout.ConversionPattern=%-m [%-d{yyyy/MM/dd} ,%c]%n

6. 更多文件:
官方文件
Reporting Application Errors by Email

沒有留言: