快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
if (stafHandle != null){        try {          stafHandle.unRegister();        } catch (STAFException e) {          //ignore        }      }    }    @Override    public void flush() {      //nothing    }    @Override    public void publish(LogRecord record) {      if (!isLoggable(record)) {        return;      }      String msg;      try {        msg = getFormatter().format(record);      } catch (Exception ex) {        reportError(null, ex, ErrorManager.FORMAT_FAILURE);        return;      }      try {        STAFLog.log(stafHandle, STAFLog.MACHINE,            logName, record.getLevel().getName(), msg);      } catch (Exception ex) {        reportError(null, ex, ErrorManager.WRITE_FAILURE);      }    ...

扩展JDK日志框架(6)

时间:2011-07-18 IBM 颜 林

在实现 STAFHandler 类时有以下几个要点:

由于 STAF API 的调用时需要一个 STAFHandle 的对象来代表本地的 STAF 服务,在该类中声明了一个全局变量用来存储 STAFHandle 。

close 方法是用来清理系统资源的,上述代码的 close 方法中释放了全局变量 STAFHandle 对象。

publish 方法就是获得格式化后的消息后,直接调用 STAF 的日志 API 将日志发送到 STAF 服务中。

但到目前为止,我们还没有给 STAFHandler 类添加一个配置的代码,使之可以支持配置文件。下面我们定义了一个函数 configure,其代 码如清单 9 所示。

清单 9 配置函数实现

private void configure() {      if (stafHandle == null) {        try {          stafHandle = new STAFHandle("my application");        } catch (STAFException e) {          reportError("registe staf handle error", e, ErrorManager.OPEN_FAILURE);        }      }      LogManager manager = LogManager.getLogManager();      String cname = getClass().getName();      //set staf log name      logName = manager.getProperty(cname + ".name");      if (logName == null)        logName = "demo.staflog";      //set formatter      String sformatter = manager.getProperty(cname + ".formatter");      Formatter formatter = null;      if (sformatter != null) {        try {          formatter = (Formatter)Class.forName(sformatter).newInstance();        } catch (Exception e) {          //ignore        }      }      setFormatter(formatter == null? new STAFFormatter() : formatter);      //set level      String sLevel = manager.getProperty(cname + ".level");      Level level = null;      if (sLevel != null) {        try {          level = STAFLevel.parse(sLevel);        } catch (Exception e) {          //ignore        }      }      setLevel(level == null? STAFLevel.DEBUG : level);    }

在实现配置文件支持的代码中,有以下几个要点:

STAF API 的初始化需要注册 STAFHandle 对象。而且该注册只能执行一次。我们根据全局变量 stafHandle 的值来决定是否注册该对象

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