【问题标题】:Activating an OSGI LogListener before other services?在其他服务之前激活 OSGI LogListener?
【发布时间】:2016-04-06 23:49:15
【问题描述】:

我正在使用 Apache Felix、Declarative Services 和 Maven 编写基于 OSGI 的桌面应用程序。它将使用JavaFX,所以我也使用Drombler FX

在我开发的包中,我想使用适当的日志记录机制,我目前正在尝试使Apache Felix Log 工作。获得LogService 没有问题,但这不足以使输出出现在控制台上。

The word on the net 是 Everit 的 osgi-loglistener-slf4j 将完成这项工作,并且 - 果然 - 在osgi-loglistener-slf4j 被激活后,控制台上会出现日志输出。

然而,osgi-loglistener-slf4j 直到我自己的所有捆绑包之后才被激活,所以我感兴趣的日志信息都不会输出。我尝试在我的第一个包中创建一个@Reference 到一个LogLevel 以尝试强制激活osgi-loglistener-slf4j,但没有成功。

如何先激活osgi-loglistener-slf4j?我已经阅读了有关启动级别的信息,但是我无法找到有关如何在我的上下文中应用它们的任何信息(即桌面而不是服务器,所以没有 PAX 或 Karaf;Maven;我使用 NetBeans,所以没有 Eclipse)。

【问题讨论】:

  • 我正在通过实现我自己的日志服务(实现org.osgi.service.log.LogService)作为 Slf4j 的包装器来解决这个问题。也许这是最好的方法。
  • 您可以通过使用felix start levels 并将osgi-loglistener-slf4j 级别1 和其他捆绑包级别2 来调整启动顺序
  • 我刚刚发现了this thread,它解决了同样的问题,尽管还没有定论。
  • 这不是一个真正的答案,但这是我决定继续进行的方式。我没有为任何基于org.osgi.service.log.LogService 的解决方案而烦恼:使用简单的 Slf4j 解决方案要容易得多。这样我就可以确保激活没有问题。
  • 哦,如果必须记录特定包的信息,可以将其放入 Slf4j 标记中...

标签: maven logging apache-felix declarative-services drombler-fx


【解决方案1】:

Drombler FX 使用 SLF4J:http://www.drombler.org/drombler-fx/0.7/docs/tutorial/logging.html#logging

只需使用以下内容,它应该可以工作:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;  

...

private static final Logger LOG = LoggerFactory.getLogger(MyClass.class);

在 POM 中添加如下依赖:

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
    </dependency>

【讨论】:

  • 我就是这么做的。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-02
  • 2015-09-13
  • 1970-01-01
  • 1970-01-01
  • 2018-07-11
  • 2011-01-01
  • 2019-08-31
相关资源
最近更新 更多