快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
类结构图如 图 2 所示。

图 2 Handler 类图

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

由该类图可见,Handler 抽象类提供了抽象接口:publish, flush 和 close 。这些接口提供了日志输出的基本功能。同时 Handler 类保 存了 Formatter,Filter 和 Level 对象用来控制日志输出。因此,编写自定义的 Handler 类需要如下步骤:

继承 Handler 抽象类

实现 publish,flush 和 close 方法。其中 publish 方法是用于发布一条日志记录。 flush 方法是清空内存缓冲区。 close 方法是当应 用程序关闭的时候,释放该 Handler 类所申请的资源(如文件,socket 等)

设置默认的 Formatter,Filter 和 Level 对象。必要的时候,可以在类的初始化时候读取配置文件来设置这些参数。

一个典型的自定义 Handler 类实现如清单 1 所示。

清单 1 自定义 Handler 类

public class MyHandler extends Handler {    private boolean doneHeader = false;    public MyHandler() {      setLevel(Level.INFO);      setFilter(null);      setFormatter(new SimpleFormatter());    }    _cnnew1@Override    public void close() throws SecurityException {    if (!doneHeader) {      output(getFormatter().getHead(this));      doneHeader = true;    }    output(getFormatter().getTail(this));    flush();    }    @Override    public void flush() {      // 清空缓冲区    }    @Override    public void publish(LogRecord record) {      if (!isLoggable(record)) {        return;      }      String msg = getFormatter().format(record);      try {        if (!doneHeader ) {          output(getFormatter().getHead(this));          doneHeader = true;        }        output(msg);      } catch (Exception ex) {        reportError(null, ex, ErrorManager.WRITE_FAILURE);      }    }    private void output(String message) {      // 实现日志输出    } }

扩展JDK日志框架(3)

时间:2011-07-18 IBM 颜 林

这里 reportError 方法是将日志类中的错误信息输出到外界,这个是由 ErrorManager 类实现的,ErrorManager 类负责记录日志框架中 Handler 的错误,一般情况下是将该错误打印到控制台中。具体的每条日志消息被 JDK 日志框架封装成 LogRecord 对象,该类部分定义如 清 单 2 所示。

清单 2 LogRecord 类定义

public class LogRecord implements java.io.Serializable {    public String getLoggerName();    public void setLoggerName(String name);    public ResourceBundle getResourceBundle();    public void setResourceBundle(ResourceBundle bundle);    public Level getLevel();    public void setLevel(Level level);    public String getMessage();    public void setMessage(String message);    public Object[] getParameters();    public void setParameters(Object parameters[]);    public int getThreadID();    public void setThreadID(int threadID);    public long getMillis();    public void setMillis(long millis);    public Throwable getThrown();    public void setThrown(Throwable thrown);    ... }

由清单 2 可见,LogRecord 类包含了一个日志消息的级别、消息文本、时间、参数、线程等等所有的信息,这些都交给 Handler, Formatter 和 Filter 这些对象来处理。同时该类也是可序列化的,可以序列化到网络和文件

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号