`
evget
  • 浏览: 141338 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
文章分类
社区版块
存档分类

JDK日志框架的扩展

阅读更多
文章关键字:|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
分享到:
评论

相关推荐

    采用jdk实现的日志框架

    对于希望深入理解并定制JDK日志框架的开发者来说,研究`LogConfig.xml`的配置以及`java.util.logging`的API是非常有必要的。这包括学习如何创建自定义的`Handler`、`Filter`和`Formatter`,以及如何通过代码动态调整...

    对JDK log日志的扩展

    总之,扩展JDK日志系统可以帮助我们构建更适合项目需求的日志框架,无论是为了满足特定的输出格式、提高日志处理效率,还是为了与其他日志库集成。通过深入理解和实践,开发者可以更好地管理和利用日志信息,从而...

    Jdk1.8搭建SSh框架所需Jar包

    本教程将详细介绍如何在JDK 1.8环境下搭建SSH框架,并列出所需的jar包。 首先,SSH框架的组成部分如下: 1. **Struts**:这是一个基于MVC设计模式的Action驱动的Web框架,负责处理HTTP请求并生成响应。Struts提供...

    日志框架总结JUL、Log4j、Log4j2、Logback以及门面技术

    - 使用**`slf4j-simple`**、**`slf4j-log4j12`**、**`slf4j-jdk14`**等绑定来连接不同的日志框架。 - **示例**: ```java import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Slf4jTest...

    一种Java日志系统框架的设计与实现 转).doc

    3. **Commons Logging Framework**:Apache项目,作为Log4J和JDK日志框架的抽象层,提供统一的API。 本文提出的日志系统设计借鉴了Log4J的部分接口,但实现了全新的内部机制。系统架构分为两大部分: 1. **日志...

    JDK1.4老版本

    Java Logging API在1.4版本中正式成为标准,提供了灵活的日志记录框架,便于开发者根据需求调整日志级别和输出格式。 5. **集合框架的完善** 对集合框架进行了进一步的优化和扩展,包括`java.util.concurrent`...

    第八节课-Spring5.0新特性之日志框架-2(7)1

    总结来说,Spring 5.0的日志框架新特性强调了日志管理的灵活性和可扩展性,通过使用SLF4J这样的日志门面,开发者可以根据项目需求选择不同的日志实现,同时保持代码的简洁和模块化。在实际项目中,合理选择和配置...

    jdk 1.4 旧版 windows zip压缩包

    在日志方面,JDK 1.4引入了`java.util.logging`包,提供了一套轻量级的日志框架,替代了之前依赖第三方日志库的做法,简化了日志记录的集成。 在安全性方面,JDK 1.4增强了SSL/TLS协议,提升了网络通信的安全性。...

    JDK Logger 简介

    JDK Logger是Java标准库中的日志框架,它提供了一套接口和类来创建、配置和使用日志记录器。主要组件包括: 1. **Logger** - 是日志记录的核心类,负责实际的日志输出。每个类都可以有自己的Logger实例,通过`...

    jdk版本资源,jdk1.4,jdk1.6,jdk1.8

    5. **Logging API**:`java.util.logging`包提供了统一的日志框架,便于管理和配置日志输出。 6. **JMX(Java Management Extensions)**:扩展了管理工具和应用程序的监控功能,便于系统管理和维护。 **JDK ...

    jdk1.4 json包 6个全

    1. **commons-collections.jar**:这是Apache Commons Collections库,提供了大量的集合框架扩展,包括各种集合、映射和迭代器的实用工具类。它对于增强Java内置集合的功能非常有用,例如增加新的集合类型、查询和...

    Java JDK1.6

    3. **集合框架扩展**:JDK1.6对集合框架进行了扩展,新增了一些实用类,如`Collections.sort()`方法支持自定义比较器,`HashMap`和`HashSet`的初始化容量可设置为2的幂次,以提高性能。 4. **并发编程改进**:引入...

    Java常用的日志框架对比和深入分析

    常见的日志框架有Log4j、Log4j2、Logback、JDK-Logging等,这些框架各有特点,适应不同的应用场景。 **Log4j** 是Apache组织开发的一个功能强大的日志库,它允许将日志信息输出到控制台、文件、GUI或操作系统事件...

    tomcat6.0.44+jdk1.7或jdk1.8或jdk1.6

    **JDK 1.7** (也称为Java 7)引入了许多新特性,如try-with-resources语句、钻石操作符、多线程Fork/Join框架、类型推断、改进的Swing UI、文件系统API(java.nio.file包)、动态语言支持等。它是Java发展历程中的一...

    jdk1.4压缩包

    10. **日志框架(java.util.logging)**:JDK 1.4引入了一个内置的日志框架,为应用程序提供了一种标准的方式来记录和控制日志信息。 总的来说,JDK 1.4是Java发展历程中的一个重要里程碑,它的许多特性在后续的...

    JDK1.6中文API

    6. **改进的日志框架**:JDK1.6中的日志API`java.util.logging`提供了更强大的控制和配置选项,便于调试和监控应用程序的行为。 7. **增强的异常处理**:JDK1.6引入了`try-with-resources`语句,允许在`try`块中...

    java jdk1.7源码包,用于centos7使用jdk1.7编译openjdk1.8的 1.7版本

    在开发和维护Java应用程序时,理解并熟悉JDK源码对于开发者来说至关重要,特别是当需要对源代码进行调试、优化或扩展时。 首先,让我们深入了解一下JDK 1.7的关键特性: 1. **Diamond操作符**:在JDK 7中引入了...

    jdk6中文版

    6. **改进的日志框架**:Java.util.logging的改进提供了更多的控制和定制选项,使日志管理更加灵活。 7. **JDBC 4.0**:引入了新的数据库连接池和自动类型转换,增强了数据库访问性能和稳定性。 8. **Java ...

    ssm整合jar包 (可以在jdk1.8使用)

    7. **最佳实践**:为了提高SSM项目的可维护性和可扩展性,开发者应遵循一些最佳实践,如模块化设计、合理的异常处理、事务管理策略、日志记录以及单元测试等。 综上所述,SSM整合包为Java开发者提供了一套高效、...

    log日志组件总结

    例如,`java.util.logging.Logger`类提供了基础的日志记录功能,但其灵活性和可扩展性相比于其他第三方日志框架略显不足。 接下来是Apache Commons Logging(commonLog),它是一个抽象层,允许开发者选择底层的...

Global site tag (gtag.js) - Google Analytics