2009年11月19日

Java:Log4j 的簡單教學


 
Log4j 是目前開發 java 時很常用到的 log 套件,
以下整理一些我目前用到的功能,並附上更多更深入的教學。

首先在使用  Log4j 時我們要先將一些 jar 檔匯入,
如果有出現意外的 Exception 記得先找看看是不是有 jar 檔沒有匯入,
類似的問題將 Exception 丟到 google 就會有解答,所以在這邊就不詳細說明。
只列出官方的使用前須知:http://logging.apache.org/log4j/1.2/faq.html#1.3

(2011.10.04更新)
若您只是要快速產生或下載 Log4j 的設定檔,請參考:
Logback, Log4j 設定檔自動產生器

使用 Log4j 時我們可以建立一個 Log4j.properties 檔來描述我們要記錄的項目,
這個設定檔長得像下面這樣:
--------------------------------------------------------------------------------------------------------------
log4j.rootLogger=Info, A1, A2


# 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=[%d{yy/MM/dd HH:mm:ss}][%p][%C-%L] %m%n

# A2 is set to be a file
log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=[%d{yy/MM/dd HH:mm:ss}][%p][%C-%L] %m%n
log4j.appender.A2.File=./log/Log4j.log
--------------------------------------------------------------------------------------------------------------
關於設定檔的詳細設定說明可以參考史帝芬心得筆記,重要部份節錄如下:
  1. 階層:
  2. Log4j將輸出訊息分成五個等級,分別為DEBUG、INFO、WARN、ERROR、FATAL,在上面設定檔將輸出等級 設為INFO,就表示INFO~FATAL等級的訊息將會輸出,因此DEBUG等級的訊息就會被忽略,如果將設定檔的 第一行改為log4j.rootLogger=DEBUG, A1, A2,就會兩個訊息都輸出了。除了這五個等級外,也可以設為ALL或OFF, ALL很示全部訊息都輸出,OFF則表示不輸出訊息。
  3. 輸出格式:
  4. # %c 輸出日誌訊息所屬的類別的全名 # %d 輸出日誌時間點的日期或時間,指定格式的方式:%d{yyy-MM-dd HH:mm:ss }。 # %l 輸出日誌事件的發生位置,即輸出日誌訊息的語句處於它所在的類別的第幾行。 # %m 輸出訊息,如log(message)中的message。 # %n 輸出一個列尾符號。 # %p 輸出優先階層,即DEBUG,INFO,WARN,ERROR,FATAL。如果是調用debug()輸出的,則為DEBUG,依此類推。 # %r 輸出自應用啟動到輸出該日誌訊息所耗費的毫秒數。 # %t 輸出產生該日誌事件的線程名。 # %r 輸出自應用啟動到輸出該日誌訊息所耗費的毫秒數。 # %f 輸出日誌訊息所屬的類別的類別名。 值得注意的是A2的appender被設為org.apache.log4j.DailyRollingFileAppender表示Log4j會將日誌檔依日期分開。
完成設定檔後可以開始寫程式,程式的內容非常簡單:
    1 package demo.log4j;
    2 
    3 import org.apache.log4j.Logger;
    4 import org.apache.log4j.PropertyConfigurator;
    5 
    6 public class Log4jDemo {
    7 
    8     static public void main(String args[]) {
    9 
   10         // 純 java project 中,若將 Log4j.properties 和 java 檔放在一起,
   11         // 則 Eclipse 會把他複製到 .class 檔的位置,(project路徑/build/classes/package路徑/檔名)
   12         // 若是 web-application 的話,會在 (project路徑/WEB-INF/classes/package路徑/檔名)
   13         PropertyConfigurator.configure("build/classes/demo/log4j/Log4j.properties");
   14         Logger logger = Logger.getLogger(Log4jDemo.class);
   15 
   16         // 對應的 Log4j.properties 設定要在等級 Info 之上才會顯示,所以logger.debug 不會出現
   17         logger.debug("Hello Log4j, this is debug message");
   18 
   19         // 以下的訊息會出現在 console 和 log file 中
   20         logger.info("Hi Log4j, this will appear in console and log file");
   21         logger.error("This is error message!!!");
   22     }
   23 }
其結果會在 console 和 log file 中出現這些log :
[09/11/19 18:44:39][INFO][demo.log4j.Log4jDemo-20] Hi Log4j, this will appear in console and log file
[09/11/19 18:44:39][ERROR][demo.log4j.Log4jDemo-21] This is error message!!!

除了將 log 寫在 console 和 log file 外,Log4j 還可以寫入其他更多地方,如 DB、Email等等,
這些應用可以參考:利用log4j實作console log + file log + mail log + db log 

關鍵字:Log4j、properties、設定檔、教學、示範、範例、設定
參考資料:
  1. Log4j 官方網站
  2. Log4j 官方網站 F&Q
  3. 史帝芬心得筆記
  4. 利用log4j實作console log + file log + mail log + db log 


更多精選推薦文章

0 意見 :