JDK日志框架之綜合實(shí)現(xiàn)淺析
JDK日志框架之綜合實(shí)現(xiàn)就是將之前的一切組合起來(lái),實(shí)現(xiàn)一個(gè)JDK日志類的結(jié)合。
JDK日志清單 12 描述了如何在一段實(shí)際的代碼中將 STAF 日志處理類和 JDK 日志類結(jié)合起來(lái)。 從清單 12 可以看出,該實(shí)例默認(rèn)指定輸出到 STAF 日志服務(wù)的日志名稱為“ staflogger ”。然后通過(guò)動(dòng)態(tài)配置的方法來(lái)設(shè)定 Handler,Level 和 Formatter .最后在調(diào)用JDK的日志對(duì)象的log 方法記錄了 4 種自定義級(jí)別的日志。
JDK日志清單 12 一個(gè)完整的例子
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 類定義
◆設(shè)置日志對(duì)象的 Handler
demo.staflog.STAFLoggerTest.handlers= demo.staflog.STAFHandler
demo.staflog.STAFLoggerTest.level = DEBUG
◆取消發(fā)送日志到父 Logger 對(duì)象
demo.staflog.STAFLoggerTest.useParentHandlers = FALSE
◆設(shè)置 Handler 的名稱,輸出級(jí)別和格式化對(duì)象
demo.staflog.STAFHandler.name= staflogger
demo.staflog.STAFHandler.level = DEBUG
demo.staflog.STAFHandler.formatter = demo.staflog.STAFFormatter
這樣代碼可以簡(jiǎn)化為清單 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");
- }
- }
配置文件的方式相對(duì)于動(dòng)態(tài)配置的方式更加靈活,因?yàn)檫@無(wú)需改變和重新編譯代碼,只需要修改配置文件,就能修改日志中 Handler,Level 和 Formatter 的組合配置,這對(duì)于已經(jīng)部署發(fā)布的軟件而言,有著更為實(shí)際的意義。
當(dāng)運(yùn)行代碼后,在命令行中輸入 STAF 命令來(lái)顯示 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 代碼中記錄的信息,它們已經(jīng)被輸出到 STAF 的日志服務(wù)中了。
結(jié)束語(yǔ)
那么綜上所述,JDK 日志框架簡(jiǎn)單靈活,它雖然比 log4j 出現(xiàn)的時(shí)期晚,但其功能并不比 log4j 少。而且 JDK 日志框架直接隸屬于 JDK,被 Java 標(biāo)準(zhǔn)所支持而無(wú)需安裝第三方庫(kù)文件。本文介紹了 JDK 日志框架的結(jié)構(gòu),如何擴(kuò)展JDK 日志框架使之滿足實(shí)際的項(xiàng)目需求。并以如何在 Java 程序中將日志輸出到 STAF 的日志服務(wù)中為例,一步步描述了如何實(shí)現(xiàn)擴(kuò)展 JDK 日志組件,使之和 STAF 日志服務(wù)結(jié)合到一起,同時(shí)如何創(chuàng)建靈活的配置文件來(lái)組合日志框架組件。希望本文可以給其他需要擴(kuò)展JDK 日志組件的開(kāi)發(fā)者提供幫助。
【編輯推薦】