在 Web 應用程式中使用 Jakarta Commons Logging 與 Log4j 蔡煥麟 Mar-25-2005 http://140.138.148.144/~s882515/blog/log4j.htm 摘要 簡單介紹 Jakarta Commons Logging 與 log4j 的用法,以範例說明如何在 Web 應用程式中使用 logging。 1. 簡介 在開發 Java 或 JSP 應用程式時,最簡單的除錯技巧就是呼叫 System.out.println() 將訊息印出來,或者將訊息顯示在網頁上,這類方式很簡單,但卻有以下缺點: 若將除錯資訊顯示在網頁上,會破壞應用程式的輸出畫面。 除錯時埋了一堆 println() 呼叫,除錯完畢或者產品交付之前必須一一找出來刪除。 有些問題不易在開發時期發現,或者臭蟲出現的時機不是固定的,這類問題如果用單純的 println() 方法來找,由於輸出的訊息可能非常多,又沒有分類,要花比較多時間去過濾跟尋找。 比較好的 logging 技術便可以解決以上的問題,而且讓我們在程式的任何地方都能輸出除錯訊息,輸出的裝置可以是螢幕、檔案、甚至是電子郵件。如果把除錯訊息記錄到檔案中,經由檢視客戶執行時的記錄檔,就可以了解使用者在執行程式時所發生的內部細節,以便找出不容易在開發時期發現的臭蟲。 本文先簡單介紹 Jakarta Commons Logging 與 log4j 這兩個 logging 套件,並以 Web 應用程式的範例來說明如何利用這兩個套件輸出 log 訊息,包括安裝、設定、以及如何撰寫輸出 log 訊息的程式碼。 1.1 Jakarta Commons Logging 套件 Commons Logging 套件是一套通用的 logging API,可以讓開發人員隨意切換 logging 的實作產品,也就是說,如果你發現了一個更好用 logging 元件,你可以經由修改組態檔來切換欲使用的 logging 元件,而不用修改程式碼。 Commons Logging 套件支援的 logging 實作產品有: Log4j JDK 1.4 Logging Avalon LogKit SimpleLog(把日誌訊息寫到 stdout 和 stderr) NoOpLog(忽略日誌訊息) 其中 SimpleLog 和 NoOpLog 是 Commons Logging 內建的實作品。Log4j 這個實作品已經提供了很多功能,但如果你覺得現有的實作品仍無法滿足你的需求,你也可以自行實作,並為此實作品提供一個配接器(adapter),這樣你在程式中一樣還是使用 Commons Logging API 來撰寫 logging 程式碼。 1.2 Jakarta Log4j 套件 Log4j 是 Jakarta 開放原始碼計劃的其中一項專案,它是一個用來輸出日誌訊息的 Java 套件,它擁有豐富的功能,而且在設計上同時考慮到彈性與效率,使用也很容易。 如果你單獨使用 log4j,在程式裡面呼叫的日誌輸出函式就是 log4j 提供的專屬函式,但為了降低程式與特定 logging 元件的耦合度,比較好的方式還是使用 Commons Logging 搭配 log4j。 2. 安裝 以下是 Commons Logging 與 log4j 的安裝與設定步驟,主要是針對 Web 應用程式來說明: 安裝 Commons Logging 套件。到 http://jakarta.apache.org/site/downloads/downloads_commons.html 下載 Commons Logging 套件。我下載的檔案名稱是 commons-logging-1.0.4.zip。把壓縮檔裡面的所有 .jar 檔放到你的 Web 應用程式的 WEB-INF/lib 目錄下。 安裝 Log4j 套件。到 http://logging.apache.org/site/binindex.html 下載,我下載的檔案是 logging-log4j-1.2.9.zip。把 .jar 檔放到你的 Web 應用程式的 WEB-INF/lib 目錄下。 如果是一般的 Java 應用程式,可以把 .jar 檔案複製到 JDK 的 jrelibext 目錄下,或者將 .jar 檔的路徑加入 CLASSATH。 3. 使用 如前面提到的,Commons Logging 支援多種 logging 實作產品,這裡我們使用 Log4j 作為 logging 元件。 3.1 設定 Commons Logging 與 Log4j 在撰寫程式前,必須先建立一些設定檔,步驟如下: 在你的 Web 應用程式的 WEB-INFclasses 目錄下建立一個 commons-logging.properties 屬性檔。內容只有下面這行:
1 |
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger |
這行的作用是指定 Commons Logging 使用的 logging 元件,這裡使用的是 log4j 套件的 Log4JLogger。 註: 有些文件是使用 org.apache.commons.logging.impl.Log4JCategoryLog,但此類別已經過時,請改用 Log4JLogger。 其它支援的 log 實作元件: org.apache.commons.logging.impl.SimpleLog – 這是 Commons Logging 內建的簡單 logger。 org.apache.commons.logging.impl.Jdk14Logger – 這是 JDK 1.4 的 logger。 在你的 Web 應用程式的 WEB-INFclasses 目錄下建立一個 log4j.properties,內容如下:
1 |
log4j.rootLogger=INFO, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n |
此設定檔指定使用 console appender 來記錄日誌,以便將日誌訊息輸出到 sdtout(System.out)。你可以在這個檔案裡面定義多個 appender,也就是說,你在程式中輸出的 log 訊息都會輸出到這些 appender(或者說,都會使用這些 appender 來輸出訊息)。第 3 …
hoho ~~ don’t put me into that kind of basket 🙂 KaWai, just you wanna be good man ~~~ after seen this entry, I decided to be a bad guy XDDDD 壞男人
22/6 RBA Instatllation and mined …… seems ok at this stage, succed login, send/received CM mail… 23/6 Server room ~37o^C …. even tune air-con to 10o^C …. DataProtector down ……. get back to PP at once…. well….. what i can do is just shut down it….. 1st time to put server on rack, q. interesting, but don’t wanna get twice on this matter esp. 2U server, in limited space and numerous cable crossing ~ begin the “hell journey” 24 – 28 /6 forget what i have done … just remember staying in noisy server room…. troubleshoot one by one by one ….. da.nsf : secondary address book for login, remember to enable trust credential, moreover, don;t trust anyone when you are facing bug, even they claim as they have already set up probably…. 90% incorrect setup, 9% Domino error, 1% unexplained error replica, connection document, mail routing …. multiple domain ….. sum up = mess … 17 servers inter-connected without documentation, in addition 10 oversea site with cluster server each, co-existing production server and migration server…. what you need to do … ensure no mail lost, mail can be delivered after rename, mail routing to correct mailbox & blackberry, keep read/unread marks in Notes ….. suffering on web in debugging.. see a sentence “smart guy learn from error….. clever guy learn from others” v. like these words right now…. coz i’m not a clever guy… also not a smart guy… i’m just a SUPPORT GUY (cantonese) 29/6 hard to remember …