隨筆-314  評論-209  文章-0  trackbacks-0

          摘要:

          本文描述了apache commons中的commons loggings部分,Commons Logging和Log4J用來提供日志支持。
          介紹
          命令行參數解析、應用程序配置和日志記錄,作為一個應用程序的骨架,隨處可見。因此,Apache軟件組織開發出了一套通用的類庫,用來幫助軟件開發人員完成這些“骨架”的建立。其中:
          •Commons CLI用于命令行解析
          •Commons Configuration用于讀取properties格式或者XML格式的配置信息
          •Commons Logging和Log4J用來提供日志支持。
          這些通用的類庫都在http://jakarta.apache.org/commons/index.html網址上提供下載

          Apache組織開發了一套用于支持Logging的Log4J,Java 1.4版本也引入了一套內置的Logging框架,如果開發者想在這兩套Logging系統之間自由的切換,該怎么辦呢?答案就是,使用Commons Logging。Commons Logging定義了一套抽象的Logging接口,用戶可以通過配置,使這些接口指向任何一個已存在的Logging系統。

          •使用抽象Logging接口
          問題:
          你在編寫一個可以重復使用的庫,需要寫入Log信息,但你不想使你的Logging功能綁定在Apache Log4J或者JDK 1.4 Logging框架上。
          解決方案:

          public static void main(String[] args) {//自己替換[]

          ??System.setProperty("org.apache.commons.logging.Log",
          ??????"org.apache.commons.logging.impl.Jdk14Logger");
          ??Log log = LogFactory.getLog("com.discursive.jccook.SomeApp");

          ??if (log.isTraceEnabled()) {
          ????log.trace("This is a trace message");
          ??}

          ??if (log.isDebugEnabled()) {
          ????log.debug("This is a debug message");
          ??}

          ??log.info("This is an informational message");
          ??log.warn("This is a warning");
          ??log.error("This is an error");
          ??log.fatal("This is fatal");

          }

          LogFactory.getLog方法會根據底層環境返回一個適當的Log實現。如果用戶想指定一個具體的Logging系統實現,可以設置org.apache.commons.logging.Log系統屬性。例如:
          System.setProperty("org.apache.commons.logging.Log",
          "org.apache.commons.logging.impl.Log4JLogger");
          這樣就會使用Log4J作為Logging系統。
          org.apache.commons.logging.Log可以設定為:
          •org.apache.commons.logging.impl.Log4JLogger??使用Log4J
          •org.apache.commons.logging.impl.Jdk14Logger??使用JDK 1.4 Logging框架
          •org.apache.commons.logging.impl.SimpleLog??使用Commons Logging內置的簡單Log實現
          其他:
          總結一下,Commons Logging會按照下列順序來指定具體的Log實現。
          •如果定義了org.apache.commons.logging.Log系統參數,實用指定的Logging實現。
          •如果在CLASSPATH里發現了Log4J,使用Log4J。
          •如果使用的是JDK1.4,使用JDK1.4內置的Logging框架。
          •如果都沒有找到,則使用Commons Logging內置的簡單Log實現。


          Jakarta Commons Logging學習筆記 轉載

          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是按照下列的步驟去發現并決定那個日志工具將被使用的(按照順序,尋找過程會在找到第一個工具時中止):

          尋找當前factory中名叫org.apache.commons.logging.Log配置屬性的值

          尋找系統中屬性中名叫org.apache.commons.logging.Log的值

          如果應用程序的classpath中有log4j,則使用相關的包裝(wrapper)類(Log4JLogger)

          如果應用程序運行在jdk1.4的系統中,使用相關的包裝類(Jdk14Logger)

          使用簡易日志包裝類(SimpleLog)


          3、開發使用logging


          //在程序文件頭部import相關的類
          import org.apache.commons.logging.Log;
          import org.apache.commons.logging.LogFactory;
          ......
          //在類中獲取一個實例
          public class MYCLASS
          {
          private static Log log = LogFactory.getLog(MyCLASS.class);
          ...
           }

          日志信息被送往記錄器,如上例中的log。這個發送過程,是通過調用Log接口中定義的方法完成的,不同方法跟不同的級別聯系在一起,日志信息通過哪個級別的方法發送,就標明了日志信息的級別。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();

            信息級別
            確保日志信息在內容上和反應問題的嚴重程度上的恰當,是非常重要的。

          fatal非常嚴重的錯誤,導致系統中止。期望這類信息能立即顯示在狀態控制臺上。

          error其它運行期錯誤或不是預期的條件。期望這類信息能立即顯示在狀態控制臺上。

          warn使用了不贊成使用的API、非常拙劣使用API, '幾乎就是'錯誤, 其它運行時不合需要和不合預期的狀態但還沒必要稱為 "錯誤"。期望這類信息能立即顯示在狀態控制臺上。

          info運行時產生的有意義的事件。期望這類信息能立即顯示在狀態控制臺上。

          debug系統流程中的細節信息。期望這類信息僅被寫入log文件中。

          trace更加細節的信息。期望這類信息僅被寫入log文件中。

          通常情況下,記錄器的級別不應低于info.也就是說,通常情況下debug的信息不應被寫入log文件中。
            工作機理

          生命周期
          JCL LogFactory必須實現建立/斷開到日志工具的連接,實例化/初始化/解構一個日志工具.

          異常處理
          JCL Log 接口沒有指定任何異常處理,對接口的實現必須捕獲并處理異常。


          多線程
          JCL Log 和 LogFactory 的實現,必須確保任何日志工具對并行的要求.


            記錄器的設置
            JCL采用的記錄器的不同其設置內容也不同。Log4J是默認首選記錄器,對其設置可通過系統屬性(system properties)或一個屬性文件進行設置,下面是其設置參數。
          <table border="1"><tr><td>參數</td><td>值域</td><td>默認值</td><td>說明</td></tr><tr><td>log4j.configuration</td><td></td><td>log4j.properties</td><td>指定配置文件的名字</td></tr><tr><td>log4j.rootCategory</td><td>priority [, appender]*</td><td></td><td>設定根記錄器的級別</td></tr><tr><td>log4j.logger&lt;.logger.name&gt;</td><td>DEBUG, INFO, WARN, ERROR, or FATAL</td><td>設定logger.name這個記錄器的級別</td></tr><tr><td>log4j.appender&lt;.appender&gt;.Threshold</td><td>priority</td><td>指定記錄設備appender(console, files, sockets, and others)的最低級別。</td></tr></table><br />
          posted on 2006-09-04 00:48 xzc 閱讀(923) 評論(0)  編輯  收藏 所屬分類: Log4j
          主站蜘蛛池模板: 紫阳县| 泉州市| 宣汉县| 怀远县| 盈江县| 湖州市| 应用必备| 运城市| 衡东县| 库车县| 大同市| 江都市| 伊川县| 吉安县| 嘉祥县| 孝感市| 江油市| 察雅县| 大埔县| 信阳市| 乐安县| 邢台县| 梁河县| 竹溪县| 阿鲁科尔沁旗| 南城县| 灵武市| 武汉市| 彰化县| 东山县| 顺平县| 定南县| 宁陕县| 开鲁县| 广饶县| 洞口县| 平塘县| 富民县| 莫力| 饶阳县| 镇赉县|