開發(fā)使用logging
日志信息被送往記錄器,如上例中的log。這個發(fā)送過程,是通過調(diào)用Log接口中定義的方法完成的,不同方法跟不同的級別聯(lián)系在一起,日志信息通過哪個級別的方法發(fā)送,就標明了日志信息的級別。org.apache.commons.logging.Log接口中定義的方法,按嚴重性由高到低的順序有:
信息級別
確保日志信息在內(nèi)容上和反應(yīng)問題的嚴重程度上的恰當,是非常重要的。
通常情況下,記錄器的級別不應(yīng)低于info.也就是說,通常情況下debug的信息不應(yīng)被寫入log文件中。
工作機理
記錄器的設(shè)置
JCL采用的記錄器的不同其設(shè)置內(nèi)容也不同。Log4J是默認首選記錄器,對其設(shè)置可通過系統(tǒng)屬性(system properties)或一個屬性文件進行設(shè)置,下面是其設(shè)置參數(shù)。
//在程序文件頭部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);
...
}
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非常嚴重的錯誤,導(dǎo)致系統(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ù)。
參數(shù) | 值域 | 默認值 | 說明 |
log4j.configuration | log4j.properties | 指定配置文件的名字 | |
log4j.rootCategory | priority [, appender]* | 設(shè)定根記錄器的級別 | |
log4j.logger<.logger.name> | DEBUG, INFO, WARN, ERROR, or FATAL | 設(shè)定logger.name這個記錄器的級別 | |
log4j.appender<.appender>.Threshold | priority | 指定記錄設(shè)備appender(console, files, sockets, and others)的最低級別。 |