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

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绝非难事。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值