對Android JDK日志總結(jié)之談
Android JDK日志可以促使移動設(shè)備的創(chuàng)新,讓用戶體驗到***越的移動服務(wù),同時,開發(fā)商也將得到一個新的開放級別,豐富的開發(fā)環(huán)境 包括設(shè)備模擬器,調(diào)試工具,內(nèi)存及性能分析圖表,和Eclipse集成開發(fā)環(huán)境插件。
由該類可見,Android JDK日志抽象類提供了抽象接口:publish, flush 和 close .這些接口提供了日志輸出的基本功能。同時 Handler 類保存了 Formatter,F(xiàn)ilter 和 Level 對象用來控制日志輸出。因此,編寫自定義的 Handler 類需要如下步驟:
1、繼承 Handler 抽象類
2、實現(xiàn) publish,flush 和 close 方法。其中 publish 方法是用于發(fā)布一條日志記錄。 flush 方法是清空內(nèi)存緩沖區(qū)。 close 方法是當(dāng)應(yīng)用程序關(guān)閉的時候,釋放該 Handler 類所申請的資源(如文件,socket 等)
3、設(shè)置默認的 Formatter,F(xiàn)ilter 和 Level 對象。必要的時候,可以在類的初始化時候讀取配置文件來設(shè)置這些參數(shù)。
- public class MyFormatter extends Formatter {
- private final String lineSeparator = System.getProperty("line.separator");
- @Override
- public String format(LogRecord record) {
- StringBuffer sb = new StringBuffer();
- String message = formatMessage(record);
- sb.append(record.getLevel().getLocalizedName());
- sb.append(message);
- sb.append(lineSeparator);
- if (record.getThrown() != null) {
- try {
- StringWriter sw = new StringWriter();
- PrintWriter pw = new PrintWriter(sw);
- record.getThrown().printStackTrace(pw);
- pw.close();
- sb.append(sw.toString());
- } catch (Exception ex) {
- }
- }
- return sb.toString();
- }
- }
這里 reportError 方法是將日志類中的錯誤信息輸出到外界,這個是由 ErrorManager 類實現(xiàn)的ErrorManager 類負責(zé)記錄日志框架中 Handler 的錯誤。一般情況下是將該錯誤打印到控制臺中。
具體的每條日志消息被Android JDK日志框架封裝成 LogRecord 對象,該類部分定義如 清單所示。由清單可見,LogRecord 類包含了一個日志消息的級別、消息文本、時間、參數(shù)、線程等等所有的信息,這些都交給 Handler,F(xiàn)ormatter 和 Filter 這些對象來處理。
同時該類也是可序列化的,可以序列化到網(wǎng)絡(luò)和文件中。該類還可以和一個 ResourceBundle 對象綁定,實現(xiàn)消息字符串的本地化處理。描述了一個典型的自定義的 Handler 類的實現(xiàn)。在本文后面部分將會有一個實際的例子來介紹如何實現(xiàn)一個Android JDK日志處理類。
【編輯推薦】