Java logging API如何与log4j较量

ZDNet软件频道 时间:2002-08-05 作者:BUILDER.COM |  我要评论()
本文关键词:
虽然我仍然使用log4j,但我认为对内建logging进行一些了解也不是什么坏事。本文将带您看看内建logging是如何实现的,找到其与log4j数据包相比的优点。
上一篇文章中,我曾经提到过一个叫做log4j的Java logging API,在那篇文章里,我指出,如果你要使用Java 2 SDK 1.4版本,Java logging将包括在标准配置中。那时,我感到虽然在标准JDK中加入了logging API,但最好还是继续使用log4j,因为他更加成熟并且被应用的更广泛。虽然仍然使用log4j,但我认为对内建logging进行一些了解也不是什么坏事,看看他是如何实现的,找到其与log4j数据包相比的优点。

如果你对log4j数据包还不熟悉,你可以先查阅上一篇文章,在我写这篇文章之时,log4j的最新版本是1.2.4,其中包括两项改动,可使其与JDK logging API的兼容性更强,这些改动涉及了类别类转移到记录器类和优先类转移到级别类。类别类和优先类仍然会得到支持,因此你从旧版本升级时现有的log4j代码仍然可用。现在,让我们来关注在应用软件中加入logging的问题。

在代码中加入记录器

代码与logging API作连接时使用的主要对象就是记录器类,记录器类包含恢复记录器的实例和记录不同级别的信息所必需的方法。你可以使用与下面类似的代码来得到一个记录器的实例:

private static final Logger logger = Logger.getLogger(JavaLoggingExample.class.getName());

这段代码使用当前类名来恢复记录器的实例,代码中,类名为JavaLoggingExamplegetLogger()方法允许一个String argument来指定记录器类名,logging API使用一个等级式的名称空间以使设置可以被较低的级别所继承。例如,如果类的全名为com.versatilesolutions.builder.JavaLoggingExample,则记录器的设置可以从com.versatilesolutions来继承,因为它是类中的父级。所有记录器都从LogManager做继承,因此新创建的记录器将拥有在LogManager中所声明的设置。

记录内容

记录是建立在由整数所代表的级别之上的,在java.util.logging数据包中的级别类包含预置级别的区域。级别包括SEVERE, WARNING, INFO, CONFIG, FINE, FINER, and FINEST。在一个级别中记录一条信息,你可以根据所需要的级别和信息调用记录方法:

logger.log(Level.SEVERE, “This is a severe level message!”);

这里记录了一个SEVERE级别信息。有几种记录方法可以通过直接记录到一个特定级别上从而节省时间:

logger.severe(“This is another severe level message!”);

当你运行这些记录方法时,输出是这样:

Jun 25, 2002 4:40:34 PM JavaLoggingExample <init>
SEVERE: This is a severe level message!

第一行在日期和时间之后是类的名称和logging API对于实现调用程序的最佳推测。这里<init>代表类的建造者,logging API不能保证追踪信息的准确性,这是由于准确性会被许多种优化运行环境所影响。


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134