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 日志组件的开发者提供帮助。
【编辑推荐】