扩展JDK日志框架

自 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 类都可以自定义扩展,下面就详细叙述如何自定义扩展这些组件。

时间: 2025-02-01 06:58:46

扩展JDK日志框架的相关文章

ASP.NET企业开发框架IsLine FrameWork系列之七--AppLogProvider日志框架(上)

日志与异常 部署系统以后,管理员需要有一套强大的日志系统来诊断和修复配置上的问题,这就需要一套通过配 置就可以变更日志记录的方式.经验表明,日志模块往往是软件开发周期中的重要组成部分,Aicken曾用 过一段时间的Log4Net,Log4Net是个很不错的日志框架,但是有时候仍然觉得有些不顺手,例如,需要用 不同类型的日志记录不同的类.方法的行为和不同的业务行为,有时需要在系统运行期,改变某个业务日 志的记录介质或是否记录等等,遇到这些因素 Log4Net可能需要修改代码重新编译,而IsLine

IsLine FrameWork系列之七--AppLogProvider日志框架(上)

日志与异常 部署系统以后,管理员需要有一套强大的日志系统来诊断和修复配置上的问题,这就需要一套通过配置就可以变更日志记录的方式.经验表明,日志模块往往是软件开发周期中的重要组成部分,Aicken曾用过一段时间的Log4Net,Log4Net是个很不错的日志框架,但是有时候仍然觉得有些不顺手,例如,需要用不同类型的日志记录不同的类.方法的行为和不同的业务行为,有时需要在系统运行期,改变某个业务日志的记录介质或是否记录等等,遇到这些因素 Log4Net可能需要修改代码重新编译,而IsLine Fra

使用Spring Boot日志框架在已有的微服务代码中添加日志功能

引言:我们需要在已有的微服务代码中添加日志功能,用于输出需要关注的内容,这是最平常的技术需求了.由于我们的微服务代码是基于SpringBoot开发的,那么问题就转换为如何在Spring Boot应用程序中输出相应的日志. 在传统Java应用程序中,我们一般会使用类似Log4j这样的日志框架来输出日志,而不是直接在代码中通过System.out.println()来输出日志.为什么要这么做呢?原因有两点.其一,我们希望日志能输出到文件中,而不是输出到应用程序的控制台中,这样更加容易收集和分析.其二

log4jdbc 数据库访问日志框架使用

log4jdbc官网地址 https://github.com/arthurblake/log4jdbc 当前最新版本是1.2, 支持JDBC3, JDBC4 log4jdbc是在jdbc层的一个日志框架,可以将占位符与参数全部合并在一起显示,方便直接拷贝sql在数据库客户端运行 未使用log4jdbc记录的SQL: select count(*) from region where id=? 使用 log4jdbc记录的SQL: select count(*) from region wher

log4jdbc数据库访问日志框架使用

log4jdbc官网地址 http://code.google.com/p/log4jdbc/ https://github.com/arthurblake/log4jdbc 当前最新版本是1.2, 支持JDBC3, JDBC4 log4jdbc是在jdbc层的一个日志框架,可以将占位符与参数全部合并在一起显示,方便直接拷贝sql在数据库客户端运行 未使用log4jdbc记录的SQL:  select count(*) from region where id=? 使用 log4jdbc记录的S

解读ASP.NET 5 & MVC6系列(9):日志框架

原文:解读ASP.NET 5 & MVC6系列(9):日志框架 框架介绍 在之前的.NET中,微软还没有提供过像样的日志框架,目前能用的一些框架比如Log4Net.NLog.CommonLogging使用起来多多少少都有些费劲,和java的SLF4J根本无法相比.但在新版的ASP.NET5中,可谓是牛气冲天,微软提供的Microsoft.Framework.Logging框架集可谓就是.NET版的SLF4J,提供相应的接口,其它第三方组件可以根据接口实现自己的实现. ILoggerFactory

解读ASP.NET 5 & MVC6系列教程(9):日志框架_自学过程

框架介绍 在之前的.NET中,微软还没有提供过像样的日志框架,目前能用的一些框架比如Log4Net.NLog.CommonLogging使用起来多多少少都有些费劲,和java的SLF4J根本无法相比.但在新版的ASP.NET5中,可谓是牛气冲天,微软提供的Microsoft.Framework.Logging框架集可谓就是.NET版的SLF4J,提供相应的接口,其它第三方组件可以根据接口实现自己的实现. ILoggerFactory接口 ILoggerFactory接口是日志的入库点,在系统中通

介绍IBM Workload Deployer中的可扩展式监控框架

IBM Workload Deployer(简称 IWD)是 IBM 近年来开发的一款面向中间件产品的http://www.aliyun.com/zixun/aggregation/13423.html">云计算平台.该平台集成了包括 WebSphere Application Server.DB2.eXtreamScale 等多款中间件产品,同时提供运行时环境,另外还提供包括如监控.日志.弹性伸缩.自动恢复等多种平台服务.其中,监控服务主要负责 1) 收集来自平台中包括操作系统.中间件.

SLF4J和Logback日志框架详解

SLF4J和Logback日志框架详解 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 本文讲述SLF4J和Logback日志框架.   SLF4J是一套简单的日志外观模式的Java API,帮助在项目部署时对接各种日志实现. LogBack在运行时使用JMX帮助修改日志配置,在生产状态下无需重启应用程序. SLF4J SLF4J是简单的日志外观模式框架,抽象了各种日志框架例如Logback.Log4j.Commons-logging和JDK自带的l