【问题标题】:Is it possible to get a log of changing bundles statuses?是否可以获得更改捆绑状态的日志?
【发布时间】:2015-01-15 06:39:21
【问题描述】:

我使用 osgi 控制台。命令ss 非常有用,但我想观察每个捆绑包的状态变化以进行调试。是否可以?

【问题讨论】:

    标签: osgi bundle


    【解决方案1】:

    是的,这是可能的。

    使用日志服务

    参见 OSGi Compendium 规范中101 日志服务规范 章下的101.6.1 Bundle Event Mapping 章:

    简而言之:如果容器中有LogService 实现,则会记录每个Bundle 和Service 事件。可以使用LogReaderService 读取记录的记录。 Equinox 有一个内置的实现,在 Felix 中我通常使用implemented by Felix

    在容器中实现 LogService 后,您应该以某种方式将结果写入控制台。这里也有几种方法。我可以推荐以下一种:

    • 安装 slf4j 实现包之一(例如:slf4j-simple,它只是将所有内容记录到标准输出)和slf4j-api
    • 安装 Everit Loglistener To SLF4J 将每个日志条目转发到 SLF4J API。 SLF4J 将比条目写入控制台

    实现一个BundleListener

    您可以使用BundleListener 捕获所有实时捆绑事件

    实现 BundleTracker

    您可以实现BundleTracker,您可以在其中捕获所有捆绑事件。在这种情况下,您还将获得在打开跟踪器之前发生的已安装捆绑包(至少已安装)的最后事件。

    【讨论】:

    • 我认为您的意思是要么使用 LogReaderService 来观察 BundleEvents 的 LogEntrys,要么使用 BundleTracker 来跟踪捆绑状态的变化。你也可以只注册一个 BundleListener 来接收 BundleEvents。
    • 是的,我是这个意思。在写答案的过程中,我以某种方式从 Bundles 切换到了 Services :)。我现在修好了。
    • 我仍然认为您需要更改答案以使用 LogReaderService 而不是 LogService。 LogService 用于制作 LogEntrys。 LogReaderService 用于观察 LogEntrys,这是这里的问题。因此,虽然您将需要一个 LogService 规范实现,但代码将需要使用 LogReaderService 来观察 LogEntrys 以了解捆绑状态的变化。
    • 是的,我在上次编辑中集中讨论了“ServiceTracker 而不是 BundleTracker”的问题。再次编辑。感谢您指出这一点。
    【解决方案2】:

    另一种方法是使用Byteman。应该是这样的:

    ####################################################
    
    RULE Bundle state change
    CLASS org.eclipse.osgi.framework.internal.core.AbstractBundle
    METHOD beginStateChange()
    IF TRUE
    DO
    System.out.println("[STATE CHANGE] " + $this.getBundle() + " > " + $this.getBundle().getState());
    ENDRULE
    
    ####################################################
    
    RULE Bundle complete state change
    CLASS org.eclipse.osgi.framework.internal.core.AbstractBundle
    METHOD completeStateChange()
    AT EXIT
    IF TRUE
    DO
    System.out.println("[COMPLETE STATE CHANGE] " + $this.getBundle() + " > " + $this.getBundle().getState());
    ENDRULE
    

    【讨论】:

      猜你喜欢
      • 2015-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-10
      • 1970-01-01
      相关资源
      最近更新 更多