快速业务通道

为Eclipse插件添加日志框架 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
外一个将日志写入插件所在的位置:“${workspace}/.metadata/.plugins /${plugin.name}"。

所有的内容都将包含在一个日志管理器插件(Plug-in Log Manager)中。您只能将其加入插件从属关系中,并从中获得日志对象。

然而,根据我的经验,我不推荐使用 java.util.logging 来实现这项功能。因为实现的代码将很长,而且只能保留一个 LogManager 实例;它使用系统类装载程序来达到这个目的。这样,所有的用户只有一个层次结构,您会失去隔离性。因此,如果很多应用程序都在使用这个记录器,那么它们将共享设置,一个应用程序的记录器实例可以继承其他应用程序记录器的设置。

既然如此,为什么我们不对 LogManager 进行扩充,并自己实现一个记录器呢?这种方法的问题是 LogManager 实例使用了系统类的装载程序从配置文件中对类进行实例化。这种插件的优点之一是通过使用不同的类装载程序提供隔离性。如果您的日志管理程序需要隔离性,那么由于架构的限制, java.util.logging 可能不适合您的要求。

另一方面,Log4j 已经证明是非常有用的。不管您相信与否,Log4j 的记录器的层次结构保留在一个称为 Hierarchy 的对象中。因此,您可以为每个插件都创建一个层次结构,这样问题就解决了。您还可以创建一个定制的 appender (处理程序)将事件发送给 "Error Log" 视图,再创建一个将事件发送到插件所在的位置。这样生活就变得美好起来了。

现在让我们回顾一下整个过程是如何实现的,我们从插件编辑器的角度入手,创建插件,并将 com.tools.logging 添加到从属类型列表中,然后创建一个 Log4j 配置文件。对 PluginLogManager 进行实例化,并使用配置文件对其进行配置。由于这个过程只需要做一次,因此您只需要在启动插件时执行这项操作即可。对于日志语句,只需像在 Log4j 中那样使用它即可。清单 1 给出了一个例子:

清单 1. TestPlugin 插件类中 PluginLogManager 的配置

private static final String LOG_PROPERTIES_FILE = "logger.properties"; public void start(BundleContext context) throws Exception {    super.start(context);    configure(); } private void configure() {    try {     URL url = getBundle().getEntry("/" + LOG_PROPERTIES_FILE);     InputStream propertiesInputStream = url.openStream();     if (propertiesInputStream != null) {       Properties props = new Properties();       props.load(propertiesInputStream);       propertiesInputStream.close();       this.logManager = new PluginLogManager(this, props);       this.logManager.hookPlugin(        TestPlugin.getDefault().getBundle().getSymbolicName(),       TestPlugin.getDefault().getLog());     }    }    catch (Exception e) {     String message = "Error while initializing log properties." +              e.getMessage();     IStatus status = new Status(IStatus.ERROR,     getDefault().getBundle().getSymbolicName(),     IStatus.ERROR, message, e);     getLog().log(status);     throw new RuntimeException(         "Error while initializing log properties.",e);    } }

无论在何时部署插件,都只需要修改日志配置文件和日志过滤条件,或者修改其输出,而不需要修改任何代码。更好的一点是,如果日志被禁用,那么所有的语句都不会影响性能,因为性能是 L

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