JDK日志框架之綜合實現淺析
JDK日志框架之綜合實現就是將之前的一切組合起來,實現一個JDK日志類的結合。
JDK日志清單 12 描述了如何在一段實際的代碼中將 STAF 日志處理類和 JDK 日志類結合起來。 從清單 12 可以看出,該實例默認指定輸出到 STAF 日志服務的日志名稱為“ staflogger ”。然后通過動態配置的方法來設定 Handler,Level 和 Formatter .最后在調用JDK的日志對象的log 方法記錄了 4 種自定義級別的日志。
JDK日志清單 12 一個完整的例子
package demo.staflog;
- import java.util.logging.Logger;
- public class STAFLoggerTest {
- public static void main(String[] args) {
- Logger logger = Logger.getLogger(STAFLoggerTest.class.getName());
- logger.setUseParentHandlers(false);
- logger.setLevel(STAFLevel.DEBUG);
- STAFHandler stafHandler = new STAFHandler("staflogger");
- stafHandler.setLevel(STAFLevel.DEBUG);
- stafHandler.setFormatter(new STAFFormatter());
- logger.addHandler(stafHandler);
- //log
- logger.log(STAFLevel.DEBUG, "debug log");
- logger.log(STAFLevel.FATAL, "fatal log");
- logger.log(STAFLevel.ERROR, "error log");
- logger.log(STAFLevel.TRACE, "trace log");
- }
- }
但我們也可以將這些代碼改為配置文件的方式,其配置文件如清單 13 所示:
JDK日志清單 13 STAFLog 類定義
◆設置日志對象的 Handler
demo.staflog.STAFLoggerTest.handlers= demo.staflog.STAFHandler
demo.staflog.STAFLoggerTest.level = DEBUG
◆取消發送日志到父 Logger 對象
demo.staflog.STAFLoggerTest.useParentHandlers = FALSE
◆設置 Handler 的名稱,輸出級別和格式化對象
demo.staflog.STAFHandler.name= staflogger
demo.staflog.STAFHandler.level = DEBUG
demo.staflog.STAFHandler.formatter = demo.staflog.STAFFormatter
這樣代碼可以簡化為清單 14 .
JDK日志清單 14 STAFLog 類定義
- public class STAFLoggerTest {
- private static Level defaultLevel = STAFLevel.DEBUG;
- public static void main(String[] args) {
- //log
- logger.log(STAFLevel.DEBUG, "debug log");
- logger.log(STAFLevel.FATAL, "fatal log");
- logger.log(STAFLevel.ERROR, "error log");
- logger.log(STAFLevel.TRACE, "trace log");
- }
- }
配置文件的方式相對于動態配置的方式更加靈活,因為這無需改變和重新編譯代碼,只需要修改配置文件,就能修改日志中 Handler,Level 和 Formatter 的組合配置,這對于已經部署發布的軟件而言,有著更為實際的意義。
當運行代碼后,在命令行中輸入 STAF 命令來顯示 STAF 日志 staflogger:
- mymachine:~ myname$ staf local log query machine mymachine logname staflogger
- Response
- --------
- Date-Time Level Message
- ----------------- ----- ----------
- 20081111-16:15:21 Debug debug log
- 20081111-16:15:21 Fatal fatal log
- 20081111-16:15:21 Error error log
- 20081111-16:15:21 Trace trace log
這顯示了我們剛才在 java 代碼中記錄的信息,它們已經被輸出到 STAF 的日志服務中了。
結束語
那么綜上所述,JDK 日志框架簡單靈活,它雖然比 log4j 出現的時期晚,但其功能并不比 log4j 少。而且 JDK 日志框架直接隸屬于 JDK,被 Java 標準所支持而無需安裝第三方庫文件。本文介紹了 JDK 日志框架的結構,如何擴展JDK 日志框架使之滿足實際的項目需求。并以如何在 Java 程序中將日志輸出到 STAF 的日志服務中為例,一步步描述了如何實現擴展 JDK 日志組件,使之和 STAF 日志服務結合到一起,同時如何創建靈活的配置文件來組合日志框架組件。希望本文可以給其他需要擴展JDK 日志組件的開發者提供幫助。
【編輯推薦】