JDK日志框架之综合实现浅析
创始人
2024-04-12 07:51:05
0

JDK日志框架之综合实现就是将之前的一切组合起来,实现一个JDK日志类的结合。

JDK日志清单 12 描述了如何在一段实际的代码中将 STAF 日志处理类和 JDK 日志类结合起来。 从清单 12 可以看出,该实例默认指定输出到 STAF 日志服务的日志名称为“ staflogger ”。然后通过动态配置的方法来设定 Handler,Level 和 Formatter .最后在调用JDK的日志对象的log 方法记录了 4 种自定义级别的日志。

JDK日志清单 12 一个完整的例子

package demo.staflog;

  1. import java.util.logging.Logger;   
  2.  
  3. public class STAFLoggerTest {   
  4. public static void main(String[] args) {   
  5. Logger logger = Logger.getLogger(STAFLoggerTest.class.getName());   
  6. logger.setUseParentHandlers(false);   
  7. logger.setLevel(STAFLevel.DEBUG);   
  8. STAFHandler stafHandler = new STAFHandler("staflogger");   
  9. stafHandler.setLevel(STAFLevel.DEBUG);   
  10. stafHandler.setFormatter(new STAFFormatter());   
  11. logger.addHandler(stafHandler);   
  12. //log   
  13. logger.log(STAFLevel.DEBUG, "debug log");   
  14. logger.log(STAFLevel.FATAL, "fatal log");   
  15. logger.log(STAFLevel.ERROR, "error log");   
  16. logger.log(STAFLevel.TRACE, "trace log");   
  17. }   
  18. }  

但我们也可以将这些代码改为配置文件的方式,其配置文件如清单 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 类定义

  1. public class STAFLoggerTest {   
  2. private static Level defaultLevel = STAFLevel.DEBUG;   
  3. public static void main(String[] args) {   
  4. //log   
  5. logger.log(STAFLevel.DEBUG, "debug log");   
  6. logger.log(STAFLevel.FATAL, "fatal log");   
  7. logger.log(STAFLevel.ERROR, "error log");   
  8. logger.log(STAFLevel.TRACE, "trace log");   
  9. }   
  10. }  

配置文件的方式相对于动态配置的方式更加灵活,因为这无需改变和重新编译代码,只需要修改配置文件,就能修改日志中 Handler,Level 和 Formatter 的组合配置,这对于已经部署发布的软件而言,有着更为实际的意义。

当运行代码后,在命令行中输入 STAF 命令来显示 STAF 日志 staflogger:

  1. mymachine:~ myname$ staf local log query machine mymachine logname staflogger   
  2.  Response   
  3.  --------   
  4.  Date-Time         Level Message     
  5.  ----------------- ----- ----------   
  6.  20081111-16:15:21 Debug debug log   
  7.  20081111-16:15:21 Fatal fatal log   
  8.  20081111-16:15:21 Error error log   
  9.  20081111-16:15:21 Trace trace log 

这显示了我们刚才在 java 代码中记录的信息,它们已经被输出到 STAF 的日志服务中了。

结束语

那么综上所述,JDK 日志框架简单灵活,它虽然比 log4j 出现的时期晚,但其功能并不比 log4j 少。而且 JDK 日志框架直接隶属于 JDK,被 Java 标准所支持而无需安装第三方库文件。本文介绍了 JDK 日志框架的结构,如何扩展JDK 日志框架使之满足实际的项目需求。并以如何在 Java 程序中将日志输出到 STAF 的日志服务中为例,一步步描述了如何实现扩展 JDK 日志组件,使之和 STAF 日志服务结合到一起,同时如何创建灵活的配置文件来组合日志框架组件。希望本文可以给其他需要扩展JDK 日志组件的开发者提供帮助。

【编辑推荐】

  1. JDK1.5中新的语言特征浅析
  2. 在JDK7 b50中将实现正则表达式命名捕获组
  3. JDK日志框架介绍及其主要功能浅析
  4. JDK日志框架之自定义日志Handler浅析
  5. JDK日志框架之自定义日志Formatter

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...