Apache Commons-logging使用實例

Apache Commons-logging 使用實例
本文將介紹如何在程序中使用Apache Commons-logging
author: ZJ 07-3-17
1 Commons-Loggin 簡介
Jakarta Commons Logging (JCL) 提供的是一個日誌 (Log) 接口 (interface) ,同時兼顧輕量級和不依賴於具體的日誌實現工具。它提供給中間件 / 日誌工具開發者一個簡單的日誌操做抽象,容許程序開發人員使用不一樣的具體日誌實現工具。用戶被假定已熟悉某種日誌實現工具的更高級別的細節。 JCL 提供的接口,對其它一些日誌工具,包括 Log4J, Avalon LogKit, and JDK 1.4 等,進行了簡單的包裝,此接口更接近於 Log4J LogKit 的實現。
2 .快速入門
JCL 有兩個基本的抽象類: Log( 基本記錄器 ) LogFactory( 負責建立 Log 實例 ) 。當 commons-logging.jar 被加入到 CLASSPATH 以後,它會合理地猜想你想用的日誌工具,而後進行自我設置,用戶根本不須要作任何設置。默認的 LogFactory 是按照下列的步驟去發現並決定那個日誌工具將被使用的(按照順序,尋找過程會在找到第一個工具時停止) :
   1. 尋找當前 factory 中名叫 org.apache.commons.logging.Log 配置屬性的值
   2. 尋找系統中屬性中名叫 org.apache.commons.logging.Log 的值
   3. 若是應用程序的 classpath 中有 log4j, 則使用相關的包裝 (wrapper) (Log4JLogger)
   4. 若是應用程序運行在 jdk1.4 的系統中,使用相關的包裝類 (Jdk14Logger)
   5. 使用簡易日誌包裝類 (SimpleLog)
org.apache.commons.logging.Log 的具體實現有以下:
-org.apache.commons.logging.impl.Jdk14Logger  使用 JDK1.4
-org.apache.commons.logging.impl.Log4JLogger  使用 Log4J
-org.apache.commons.logging.impl.LogKitLogger  使用 avalon-Logkit
-org.apache.commons.logging.impl.SimpleLog   common-logging 自帶日誌實現類。它實現了 Log 接口,把日誌消息都輸出到系統錯誤流 System.err 中。  
-org.apache.commons.logging.impl.NoOpLog   common-logging 自帶日誌實現類。它實現了 Log 接口。 其輸出日誌的方法中不進行任何操做。
3 .使用JCL開發
由於 Log4j 的強大,同時開發者又不但願對 Log4j 的依賴性太強。因此目前比較流行的是 Commons-logging Log4j 結合使用。
 
1. 部署日誌器
   下載 commons-logging.jar log4j.jar 包,能後把它們放到工程的 lib 目錄下,引入工程中。
2. 指定日誌器
   在屬性文件 common-logging.properties 中設置實現接口的類。以下 ( 這裏設置 Log4j 爲所使用的日誌包 )
#commons-logging.properties 文件配置信息
 
# org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog
# Must be one of ("trace", "debug", "info", "warn", "error", or "fatal").
 
# 利用 log4j 爲輸出介質
org.apache.commons.logging.Log= org.apache.commons.logging.impl.Log4JCategoryLog
 
#JDK5 Logger
#org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger
 
3 org.apache.commons.logging.Log 接口中定義的方法 , 按嚴重性由高到低的順序有:
log.fatal(Object message);
log.fatal(Object message, Throwable t);
log.error(Object message);
log.error(Object message, Throwable t);
log.warn(Object message);
log.warn(Object message, Throwable t);
log.info(Object message);
log.info(Object message, Throwable t);
log.debug(Object message);
log.debug(Object message, Throwable t);
log.trace(Object message);
log.trace(Object message, Throwable t);
除此之外,還提供下列方法以便代碼保護。
log.isFatalEnabled();
log.isErrorEnabled();
log.isWarnEnabled();
log.isInfoEnabled();
log.isDebugEnabled();
log.isTraceEnabled();
 
4 .信息級別
確保日誌信息在內容上和反應問題的嚴重程度上的恰當,是很是重要的。
1 fatal 很是嚴重的錯誤,致使系統停止。指望這類信息能當即顯示在狀態控制檯上。
 
2 error 其它運行期錯誤或不是預期的條件。指望這類信息能當即顯示在狀態控制檯上。
 
3 warn 使用了不同意使用的 API 、很是拙劣使用 API, ' 幾乎就是 ' 錯誤 , 其它運行時不合須要和不合預期的狀態但還不必稱爲 " 錯誤 " 。指望這類信息能當即顯示在狀態控制檯上。
 
4 info 運行時產生的有意義的事件。指望這類信息能當即顯示在狀態控制檯上。
 
5 debug 系統流程中的細節信息。指望這類信息僅被寫入 log 文件中。
 
6 trace 更加細節的信息。指望這類信息僅被寫入 log 文件中。
  一般狀況下,記錄器的級別不該低於 info. 也就是說,一般狀況下 debug 的信息不該被寫入 log 文件中。
4 Apache Commons-logging 使用流程
1 )將 common-logging.jar 包加入到環境變量或者 classpath
 
2 )導入 org.apache.commons.logging.Log; org.apache.commons.logging.LogFactory; 及相關包
 
3 )在須要使用 logging 的地方獲取 Log 實例。
private static Log log = LogFactory.getLog(Test. class );
 
4 )使用 Logger 對象的 debug,info,fatal... 方法。
log .debug( "Debug info." );
5.Apache Commons-logging 使用示例
Test.java
package sample;
 
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
 
public class Test {
    private static Log log = LogFactory.getLog(Test. class );
    public void log(){
       log .debug( "Debug info." );
       log .info( "Info info" );
       log .warn( "Warn info" );
       log .error( "Error info" );
       log .fatal( "Fatal info" );
    }
    public static void main(String[] args) {
       Test test = new Test();
       test.log();
    }
}
 
結果:
DEBUG  sample.Test.log( Test.java:13 ) Debug info.
INFO   sample.Test.log( Test.java:14 ) Info info
WARN   sample.Test.log( Test.java:15 ) Warn info
ERROR  sample.Test.log( Test.java:16 ) Error info
FATAL  sample.Test.log( Test.java:17 ) Fatal info
當沒有任何配置文件( .properties )時,就如同上的結果。此時,它使用的是使用簡易日誌包裝類 (SimpleLog)
下面加入包與配置文件,使其使用 log4j
1)  加入配置文件 commons-logging.properties log4j.properties
 
2)  log4j.jar common-logging.jar 兩個包加入到環境變量或者 classpath
 
3 Test.java 內容不變。
 
3)  commons-logging.properties
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JCategoryLog
 
4 log4j.properties
log4j.rootLogger=info, stdout
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] - %m%n
 
結果:
INFO [main] - Info info
WARN [main] - Warn info
ERROR [main] - Error info
FATAL [main] - Fatal info
6.Apache Log 介紹集
7 .參考資料
[1] 官方文檔
[2] Jakarta Commons Logging(JCL) 開發手記
[url]http://blog.csdn.net/fasttalk/archive/[/url] 2005/06/29 /406681.aspx
相關文章
相關標籤/搜索