JDK日志框架的扩展

本文介绍Java 1.4引入的JDK日志框架,包括其核心组件Logger、Handler、Filter和Formatter的功能及用途。此外,还探讨了如何自定义日志处理方式,并结合STAF日志服务对Java程序进行监视。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章关键字:|JDK|日志|框架|Java|JDK|XML|HTML|测试|

  自 Java 1.4 开始,JDK 包括了一个崭新的日志框架包 java.util.logging,该日志框架设计精良,和 JDK 紧密结合,控制灵活,使用简单。日志记录对于软件的维护特别是对于已部署到运行环境之后的软件调试都有着重要的意义。在实际的项目中,往往还需要比该框架所提供的更为复杂的日志功能。对于这种需求,JDK 日志框架具有足够的可扩展能力,可以自定义不同需求的日志处理、消息格式化、日志消息级别等组件。在下面的内容中,本文将介绍了如何扩展 JDK 日志框架,自定义日志处理方式。并就一个实际的例子来介绍如何结合 JDK 日志框架和 STAF(Software Testing Automation Framework,一种自动化测试框架)日志服务来对 Java 程序进行监视。

  JDK 日志框架介绍

  JDK 的日志框架即 java.util.logging 包。对于一个软件的日志系统而言,首先必须得有一个日志对象,该对象负责记录日志信息。同时该信息可以输出到不同的位置,例如控制台,文件甚至网络中。对于信息的格式,则可以根据不同的需求,可以输出成普通文本,XML 或者 HTML 的格式。同时还需要对日志信息进行不同级别的分类,这样的好处是可以过滤冗余信息,只保留关键的日志。对于一个日志框架而言,日志对象必须是可配置的,它可以按照配置来输出到指定的目标,同时按照配置来决定输出的格式和决定何种级别以上的日志才能输出。配置的形式还可以是多种多样的,既能是代码的形式,也能是配置文件的形式。尤其是配置文件的形式,对于一个已经部署到运行环境中的软件而言,可以非常方便的改变日志配置而无需改变其源代码。

  JDK 日志框架提供了上述的所有功能。它主要包括如下几个部件:

Logger:日志记录对象。用于记录日志信息。
Handler:用于处理日志信息的输出。在 Handler 类中,可以决定日志是输出到文件中还是控制台中。
Filter: 用于过滤日志。在 Filter 类中,可以根据日志级别或者某种条件来决定是否输出该日志。这样达到去除冗余信息的目的。
Formatter:用于格式化日志信息。该类可以将日志文本格式化成 XML 或者 HTML 的格式,这完全依赖于具体的实现。
Level:用于表示日志的级别。 JDK 日志框架默认有如下级别 : SEVERE,WARNING,INFO,CONFIG,FINE,FINER,FINEST 。
  对于程序而言,它的 Logger 对象首先会判断日志的级别是否满足输出级别的要求,然后将满足级别要求的日志消息交给所配置的 Handler 对象来处理,如果日志对象配置了一个 Filter 对象,那么 Filter 对象将会对日志信息做一次过滤。 Handler 对象接受到日志消息后,根据其所配置的格式化类 Formatter 来改变日志的格式,根据所配置的 Filter 对象和 Level 对象来再次过滤日志信息,最后输出到该种 Handler 对象所指定的输出位置中,该输出位置可以是控制台,文件,网络 socket 甚至是内存缓冲区。其架构模型如图 1 所示。

图 1 JDK 日志框架


  JDK 提供了如下几种默认支持的 Handler 类:

ConsoleHandler: 输出日志到控制台中
FileHandler:输出日志到指定文件中
MemoryHandler:输出日志到内存缓冲区中,当一定的条件满足的时候(如某种关键字的日志信息)再将缓冲区中的日志输出
SocketHandler: 输出日志到网络 socket 中
StreamHandler: 输出日志到输入输出流对象中
  同时 JDK 日志框架也不失其灵活性,你可以定制自己所需要的 Handler,将日志按照自定义的需求输出到不同的位置,同时 Formatter,Level 类都可以自定义扩展,下面就详细叙述如何自定义扩展这些组件。

  自定义日志 Handler

  所有的 Handler 类都是继承自 java.util.logging.Handler 抽象类,该类结构图如 图 2 所示。

图 2 Handler 类图


  由该类图可见,Handler 抽象类提供了抽象接口:publish, flush 和 close 。这些接口提供了日志输出的基本功能。同时 Handler 类保存了 Formatter,Filter 和 Level 对象用来控制日志输出。因此,编写自定义的 Handler 类需要如下步骤:

继承 Handler 抽象类
实现 publish,flush 和 close 方法。其中 publish 方法是用于发布一条日志记录。 flush 方法是清空内存缓冲区。 close 方法是当应用程序关闭的时候,释放该 Handler 类所申请的资源(如文件,socket 等)
设置默认的 Formatter,Filter 和 Level 对象。必要的时候,可以在类的初始化时候读取配置文件来设置这些参数。


未完,原文地址:http://www.evget.com/zh-CN/Info/ReadInfo.aspx?id=9268
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值