開(kāi)發(fā)使用logging
//在程序文件頭部import相關(guān)的類(lèi)
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
......
//在類(lèi)中獲取一個(gè)實(shí)例
public class MYCLASS
{
private static Log log = LogFactory.getLog(MyCLASS.class);
...
 }

日志信息被送往記錄器,如上例中的log。這個(gè)發(fā)送過(guò)程,是通過(guò)調(diào)用Log接口中定義的方法完成的,不同方法跟不同的級(jí)別聯(lián)系在一起,日志信息通過(guò)哪個(gè)級(jí)別的方法發(fā)送,就標(biāo)明了日志信息的級(jí)別。org.apache.commons.logging.Log接口中定義的方法,按嚴(yán)重性由高到低的順序有:

  1. log.fatal(Object message);
  2. log.fatal(Object message, Throwable t);
  3. log.error(Object message);
  4. log.error(Object message, Throwable t);
  5. log.warn(Object message);
  6. log.warn(Object message, Throwable t);
  7. log.info(Object message);
  8. log.info(Object message, Throwable t);
  9. log.debug(Object message);
  10. log.debug(Object message, Throwable t);
  11. log.trace(Object message);
  12. log.trace(Object message, Throwable t);
除此以外,還提供下列方法以便代碼保護(hù).
  1. log.isFatalEnabled();
  2. log.isErrorEnabled();
  3. log.isWarnEnabled();
  4. log.isInfoEnabled();
  5. log.isDebugEnabled();
  6. log.isTraceEnabled();

  信息級(jí)別
  確保日志信息在內(nèi)容上和反應(yīng)問(wèn)題的嚴(yán)重程度上的恰當(dāng),是非常重要的。
  1. fatal非常嚴(yán)重的錯(cuò)誤,導(dǎo)致系統(tǒng)中止。期望這類(lèi)信息能立即顯示在狀態(tài)控制臺(tái)上。
  2. error其它運(yùn)行期錯(cuò)誤或不是預(yù)期的條件。期望這類(lèi)信息能立即顯示在狀態(tài)控制臺(tái)上。
  3. warn使用了不贊成使用的API、非常拙劣使用API, '幾乎就是'錯(cuò)誤, 其它運(yùn)行時(shí)不合需要和不合預(yù)期的狀態(tài)但還沒(méi)必要稱為 "錯(cuò)誤"。期望這類(lèi)信息能立即顯示在狀態(tài)控制臺(tái)上。
  4. info運(yùn)行時(shí)產(chǎn)生的有意義的事件。期望這類(lèi)信息能立即顯示在狀態(tài)控制臺(tái)上。
  5. debug系統(tǒng)流程中的細(xì)節(jié)信息。期望這類(lèi)信息僅被寫(xiě)入log文件中。
  6. trace更加細(xì)節(jié)的信息。期望這類(lèi)信息僅被寫(xiě)入log文件中。

通常情況下,記錄器的級(jí)別不應(yīng)低于info.也就是說(shuō),通常情況下debug的信息不應(yīng)被寫(xiě)入log文件中。
  工作機(jī)理
  1. 生命周期
    JCL LogFactory必須實(shí)現(xiàn)建立/斷開(kāi)到日志工具的連接,實(shí)例化/初始化/解構(gòu)一個(gè)日志工具.
  2. 異常處理
    JCL Log 接口沒(méi)有指定任何異常處理,對(duì)接口的實(shí)現(xiàn)必須捕獲并處理異常。

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

  記錄器的設(shè)置
  JCL采用的記錄器的不同其設(shè)置內(nèi)容也不同。Log4J是默認(rèn)首選記錄器,對(duì)其設(shè)置可通過(guò)系統(tǒng)屬性(system properties)或一個(gè)屬性文件進(jìn)行設(shè)置,下面是其設(shè)置參數(shù)。
參數(shù) 值域 默認(rèn)值 說(shuō)明
log4j.configuration log4j.properties 指定配置文件的名字
log4j.rootCategory priority [, appender]* 設(shè)定根記錄器的級(jí)別
log4j.logger<.logger.name> DEBUG, INFO, WARN, ERROR, or FATAL 設(shè)定logger.name這個(gè)記錄器的級(jí)別
log4j.appender<.appender>.Threshold priority 指定記錄設(shè)備appender(console, files, sockets, and others)的最低級(jí)別。