【问题标题】:How to log starting of Eclipse plug-ins / OSGi bundles?如何记录 Eclipse 插件/OSGi 包的启动?
【发布时间】:2015-07-06 05:54:18
【问题描述】:

在 Eclipse RCP 应用程序中,如何在每个插件启动时自动记录它?

我知道这些,但我正在寻找更类似于 Java 的 -verbose:class

  • OSGi 控制台查询当前插件集的能力。
  • 在每个插件的激活器中手动编码记录调用。

这感觉像是一个应该已经存在的选项。似乎应该有一个选项可以自动记录插件的捆绑状态更改。但在网上和书中快速搜索后,我没有找到任何东西。我错过了什么明显的东西吗?

【问题讨论】:

    标签: eclipse eclipse-plugin osgi eclipse-rcp osgi-bundle


    【解决方案1】:

    OSGi 已将捆绑状态更改记录到日志服务。请参阅 OSGi Compendium 规范的第 101 章。

    如果您想使用标准日志服务以外的某些特定机制记录捆绑启动事件,则可以编写BundleListener。诀窍是让您的侦听器足够早地注册,以便您捕获所有其他正在启动的包(显然,如果包含侦听器的包是最后启动的,那么它将无法看到这些事件)。

    如果您可以控制顶级应用程序,那么您应该能够从 OSGi 启动器注册侦听器,即使用系统捆绑包本身的 BundleContext。但是无论如何,启动器通常都可以控制启动包,这意味着记录包启动的时间是您的代码在每个包上调用start()!这完全取决于您的应用程序的结构。

    【讨论】:

    • 太棒了!我没有在默认设置下看到它们。 OSGi 将包状态更改记录到日志服务的级别是什么?
    • 根据第 101.6.1 节,捆绑事件映射到LOG_INFO 级别。
    • 感谢您的权威回答。在 Eclipse 的上下文中,我仍然没有将更改写入日志文件。并且在FrameworkLogEntry 的最底层构造函数中设置的断点永远不会被调用,除非我制造了一个错误。我试过设置-Declipse.log.level=INFO。我应该为 Eclipse 或 OSGi 设置另一个选项吗?
    • 您是否安装并激活了日志服务实现?
    • 我想是的。方法LogServiceManager.bundleChanged(BundleEvent) 被重复调用,但isLoggable() 一直返回false,间接因为EquinoxLogWriter.isLoggable() 返回loggableLevel == LogService.LOG_ERROR。有这个有用的评论:// 现在只记录错误;可能需要这是可配置的。为了彻底解决这个问题,我猜我需要将自己的 LogWriter/LogFilter 添加到 ExtendedLogReaderServiceFactory。任何 cmets 表示赞赏。
    猜你喜欢
    • 2010-09-18
    • 2017-06-18
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 2023-03-21
    • 2016-05-15
    • 2015-12-23
    • 2016-04-17
    相关资源
    最近更新 更多