<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

    摘要:

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

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

    &#8226;使用抽象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方法會根據(jù)底層環(huán)境返回一個適當?shù)腖og實現(xiàn)。如果用戶想指定一個具體的Logging系統(tǒng)實現(xiàn),可以設(shè)置org.apache.commons.logging.Log系統(tǒng)屬性。例如:
    System.setProperty("org.apache.commons.logging.Log",
    "org.apache.commons.logging.impl.Log4JLogger");
    這樣就會使用Log4J作為Logging系統(tǒng)。
    org.apache.commons.logging.Log可以設(shè)定為:
    &#8226;org.apache.commons.logging.impl.Log4JLogger??使用Log4J
    &#8226;org.apache.commons.logging.impl.Jdk14Logger??使用JDK 1.4 Logging框架
    &#8226;org.apache.commons.logging.impl.SimpleLog??使用Commons Logging內(nèi)置的簡單Log實現(xiàn)
    其他:
    總結(jié)一下,Commons Logging會按照下列順序來指定具體的Log實現(xiàn)。
    &#8226;如果定義了org.apache.commons.logging.Log系統(tǒng)參數(shù),實用指定的Logging實現(xiàn)。
    &#8226;如果在CLASSPATH里發(fā)現(xiàn)了Log4J,使用Log4J。
    &#8226;如果使用的是JDK1.4,使用JDK1.4內(nèi)置的Logging框架。
    &#8226;如果都沒有找到,則使用Commons Logging內(nèi)置的簡單Log實現(xiàn)。


    Jakarta Commons Logging學習筆記 轉(zhuǎn)載

    1、Commons-Loggin簡介

      Jakarta Commons Logging (JCL)提供的是一個日志(Log)接口(interface),同時兼顧輕量級和不依賴于具體的日志實現(xiàn)工具。 它提供給中間件/日志工具開發(fā)者一個簡單的日志操作抽象,允許程序開發(fā)人員使用不同的具體日志實現(xiàn)工具。用戶被假定已熟悉某種日志實現(xiàn)工具的更高級別的細節(jié)。JCL提供的接口,對其它一些日志工具,包括Log4J, Avalon LogKit, and JDK 1.4等,進行了簡單的包裝,此接口更接近于Log4J和LogKit的實現(xiàn).

    2、快速入門

      JCL有兩個基本的抽象類:Log(基本記錄器)和LogFactory(負責創(chuàng)建Log實例)。當commons-logging.jar被加入到CLASSPATH之后,它會心可能合理地猜測你喜歡的日志工具,然后進行自我設(shè)置,用戶根本不需要做任何設(shè)置。默認的LogFactory是按照下列的步驟去發(fā)現(xiàn)并決定那個日志工具將被使用的(按照順序,尋找過程會在找到第一個工具時中止):

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

    尋找系統(tǒng)中屬性中名叫org.apache.commons.logging.Log的值

    如果應(yīng)用程序的classpath中有l(wèi)og4j,則使用相關(guān)的包裝(wrapper)類(Log4JLogger)

    如果應(yīng)用程序運行在jdk1.4的系統(tǒng)中,使用相關(guān)的包裝類(Jdk14Logger)

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


    3、開發(fā)使用logging


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

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

      信息級別
      確保日志信息在內(nèi)容上和反應(yīng)問題的嚴重程度上的恰當,是非常重要的。

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

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

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

    info運行時產(chǎn)生的有意義的事件。期望這類信息能立即顯示在狀態(tài)控制臺上。

    debug系統(tǒng)流程中的細節(jié)信息。期望這類信息僅被寫入log文件中。

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

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

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

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


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


      記錄器的設(shè)置
      JCL采用的記錄器的不同其設(shè)置內(nèi)容也不同。Log4J是默認首選記錄器,對其設(shè)置可通過系統(tǒng)屬性(system properties)或一個屬性文件進行設(shè)置,下面是其設(shè)置參數(shù)。
    <table border="1"><tr><td>參數(shù)</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>設(shè)定根記錄器的級別</td></tr><tr><td>log4j.logger&lt;.logger.name&gt;</td><td>DEBUG, INFO, WARN, ERROR, or FATAL</td><td>設(shè)定logger.name這個記錄器的級別</td></tr><tr><td>log4j.appender&lt;.appender&gt;.Threshold</td><td>priority</td><td>指定記錄設(shè)備appender(console, files, sockets, and others)的最低級別。</td></tr></table><br />
    posted on 2006-09-04 00:48 xzc 閱讀(921) 評論(0)  編輯  收藏 所屬分類: Log4j
    主站蜘蛛池模板: 无码人妻一区二区三区免费看 | 两个人的视频www免费| 亚洲偷自精品三十六区| 亚洲色图视频在线观看| 亚洲一区二区三区免费观看| a色毛片免费视频| 青青操免费在线观看| 精品97国产免费人成视频| 羞羞视频免费网站含羞草| 老司机免费午夜精品视频| 美女黄色免费网站| 久久毛片免费看一区二区三区| 免费无码AV一区二区| 国产亚洲一区二区三区在线不卡| 亚洲高清免费视频| 亚洲天堂中文字幕在线| 亚洲无码精品浪潮| 日韩亚洲Av人人夜夜澡人人爽| 亚洲视频国产精品| 日韩欧美亚洲中文乱码| 久久久WWW成人免费精品| 91成人在线免费视频| 最近中文字幕无吗高清免费视频| 麻豆国产精品入口免费观看| 亚洲精品成a人在线观看| 久久亚洲国产视频| 国产精品观看在线亚洲人成网| 99麻豆久久久国产精品免费 | 亚洲综合另类小说色区| 亚洲视频网站在线观看| 亚洲av最新在线观看网址| 97精品免费视频| 亚洲中文字幕久久精品无码APP| 免费国产成人午夜私人影视| 2020久久精品国产免费| 亚洲精品免费视频| 午夜视频在线免费观看| 亚洲va在线va天堂va888www| 黄视频在线观看免费| 国产成人无码区免费A∨视频网站| 在线观看特色大片免费视频|