您的位置:首页 > 编程语言 > Java开发

JDK提供的日志API--------Logging(初识)

2010-11-25 22:50 176 查看
JDK提供的日志API在JDK1.4版本正式发布,不论是Application、JSP/Servlet还是EJB,即可以使用Java Logging
API输出调试信息,也可以用它来记录程序运行过程中安全冲突的相关信。这一切都有效地保证了程序的稳健性与可维护性。
日志系统最关键的问题是如何能够将它对程序的性能影响降到最小?Java Logging
API在设计上就充分考虑了如何尽可能地提供最轻便的实现、最小量的代码和最紧凑的结构。另一方面,它也提供了许多接口和抽象类,可以让程序员方便地扩展出自己所需要的功能。同时,Java Loggin
API提供了一种机制,允许在运行时动态改变输出的日志信息。
尽管Java Logging
API提供了强大的功能,但它却是非常容易上手的。对于一些简单的应用,Java Logging
API是非常简便而且有效率的开发工具包。并且它支持多级订阅和发布,以及可过滤的、有优先级层次的日志记录。
Java Logging
API所包含的15个类和一个接口都被平级地放在了java.util.logging包中。下面,详细其中关键的几个类和接口:
Logger:日志对象,是应用程序实现记录功能的主要实体。Logger用于记录特定系统或应用程序组件的信息。Logger对象可以具有一个任意字符串的名字,但一般建议采用有层次的包名和类名作为它的名字,以便于快捷定位错误发生的位置。当然,也可以创建一个”匿名”的Logger对象。Logger包括如下类型记录日志的方法:

一系列带有不同参数的log()方法,参数可以是级别、消息以及可选的参数等。

一系列带有不同参数的logp()方法,字母p代表精确(Precise),此系列方法作用与log方法类似,但是可以更明确地指出记录日志的类与方法。

一系列带有不同参数的logrb()方法,字母rb代表绑定的资源(Resource
Bundle),此系列方法可以用于本地化日志的输出。在创建Logger的构造函数中也可以直接给出绑定的资源名称。

3个可以对其他常规方法的执行情况进行跟踪的方法,包括entering()、existing()和throwing()方法。它们可以记录调用其他方法的过程,进入、退出或是抛出了错误。
此外,还提供了log()方法的多个简便形式,可以直接用级别来作为记录日志的方法,如serere()、warning()及log()等。分别对应相应级别的log()方法。

Level:级别对象,定义了一级标准的记录级别,可用于控制记录的输出。例如,可以把程序配置为只输出某些级别的记录,而忽略其他级别的输出。在Level类中定义了以下几个级别常量(级别常量):SEVERE、WARNING、INFO、CONFIG、FINE、FINER和FINEST。此外,还定义了常量OFF(表示关闭日志记录器)和ALL(表示要求记录所有的信息)。

Handler:处理器对象,将LogRecord对象输出到各种目标,包括内存、输出流、控制台、文件或套接字。针对不同的输出目标,Handler拥有多个不同的用途的子类。可以简单地调用setLevel(Level.OFF)来禁用一个处理器,或是为给出一个合适的级别来重新打开它。开发人员也可以根据自己的需要编写其它的处理器,比如JMSHandler或是JDBCHandler等。Handler是一个抽象类。Jdk中已经内置定义了几个常用的实现类。

LogRecord:日志记录对象。可用于在日志记录框架中和单个日志记录处理程序之间传递记录请求的详细信息,包括日志对象名、日志消息、级别以及参数等,甚至包括记录日志的类和方法名,如果在Logger对象没有用logp()方法明确指出日志源,LogRecord也会根据调用找自己推断出日志源。

LogManager:LogManager是一个单例模式的全局对象,它管理着多个Logger对象和日志服务。默认情况下,LogManager是从JRE安装目录下的lib/
logging.properties中读取日志系统的配置信息。LogManager是根据两个系统属性java.util.logging.config.class和java.util.loggin.config.fiel来获取配置信息的位置,所以也可以通过设置这两个系统属性的值来改变Logger的行为

Filter:过滤器对象,可以提供比日志级别更为精细的控制机制,来过滤日志的记录与输出。Logging
API支持通用的过滤器机制,这种机制允许应用程序添加任意多个过滤器链,以便控制记录的输出。Logging API提供的Filter接口只有一个方法public boolean
isLoggable(LogRecord record),用来判断传入的LogRecord对象是否需要作记录。

Formatter:格式化对象,支持LogRecord对象的格式化输出。在Java Logging
API中提供了两个格式化类:SimpleFormatter和XMLFormatter,分别用于把日志记录格式化为纯文本和XML格式。和处理器一样,开发人员也可以根据自己的需要开发出其他的格式器。Formatter是一个抽象类,它的子类需要实现public String format(LogRecord
record)方法。

总结:在了解了Java Logging
API所包含的这几个关键类后,我们来了解一下它们之间的关系。一个LogManager管理着多个Logger对象,而每个Logger对象可以包含多个Hanlder组成的链状,共同完成日志记录的层次处理。处理器Handler和记录器Logger可以有自己的过滤器Filter对象。同时,Handler也可以拥有一个格式化器Formatter对象。在Logging框架与上述各个对象之间,日志信息封装成LogRecord对象进行传递。

ps:比较著名和常用的的日志记录工具还有log4j(由Apache提供)。常常目睹,却从未接
触和使用过。今天粗粗翻了一下log4j。大部分思想和概念和Java
loggign API类似。
我想,弄清楚了Java loggign API。相信再看log4j,继而掌握log4j绝非难事。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: