快速业务通道

扩展JDK日志框架 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16

JDK 的日志框架有一个全局的 singleton 管理类 STAFManager,该类用于管理日志类,并提供了读取日志配置文件的成员函数 getProperty 。在上述的代码中,我们通过 STAFManager.getProperty 方法,从日志配置文件中读取 STAFHandler 对象所设置的 Formatter 类名,然后通过反射生成一个新的 Formatter 对象,设置到 Handler 对象中。

对于日志级别也是通过 STAFManager.getProperty 方法。需要注意的是由于我们的日志级别是自定义的级别,所以 Level 对象是由我们自 定义的 Level 类 STAFLevel 来生成的。

我们也能定义自己需要的属性。比如清单 9 中我们定义了一个 .name 属性,用来存储 STAF 日志名称,通过 getProperty 函数从配置文 件中读取 .name 属性。

扩展JDK日志框架(7)

时间:2011-07-18 IBM 颜 林

创建一个适合 STAF 日志的 Formatter 类

由于 STAF 日志服务无需特殊的格式,我们只需要定义一个普通文本格式的 Formatter 即可。其代码如清单 10 所示,注意这里考虑了如 果记录了一个异常对象的情况,将异常对象的 stack 打印到字符串中添加到消息文本中。

清单 10. STAFFormatter 实现

import java.io.*; import java.util.logging.*; public class STAFFormatter extends Formatter {    private final String lineSeparator = System.getProperty("line.separator");    @Override    public String format(LogRecord record) {      StringBuffer sb = new StringBuffer();      String message = formatMessage(record);      sb.append(message);      sb.append(lineSeparator);      if (record.getThrown() != null) {        try {        StringWriter sw = new StringWriter();        PrintWriter pw = new PrintWriter(sw);        record.getThrown().printStackTrace(pw);        pw.close();        sb.append(sw.toString());        } catch (Exception ex) {        }      }      return sb.toString();    } }

创建对应于 STAF 日志级别的 Level 对象

这是由于 STAFLog 有着不同的日志消息级别,它包括 Fatal, Error, Warning, Info, Tracer, Debug 等级别,有些是 JDK 日志框架已 有的级别,有些则不是。我们需要增加新的 Level 对象来满足 STAFLog 的需求。一个新的 Level 类:STAFLevel 定义如清单 11 所示。

清单 11 自定义 STAFLevel

import java.util.logging.Level; public class STAFLevel extends Level {    protected STAFLevel(String name, int value) {      super(name, value);    }    protected STAFLevel(String name, int value, String resourceBundleName) {      super(name, value, resourceBundleName);    }    public static final Level FATAL = new STAFLevel("FATAL",980);    public static final Level ERROR = new STAFLevel("ERROR",980);    public static final Level TRACE = new STAFLevel("TRACE", 790);    public static final Level DEBUG = new STAFLevel("DEBUG", 690); }

清单 11 定义了 FATAL,ERROR,TRACE 和 DEBUG 级别。这就和 STAFLog 中的部分级别一一对应起来了。

扩展JDK日志框架(8)

时间:2011-07-18 IBM 颜 林

将一切组合起来

清单 12 描述了如何在一段实际的代码中将 STAF 日志处理类和 JDK 日志类结合起来。 从清单 12 可以看出,该实例默认指定输出到 STAF 日志服务的日志名称为“ staflogger ”。然后通过动态配置的

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号