OSGi slf4j 登录 Apache Sling/felix

OSGi slf4j logging in Apache Sling/felix

我正在尝试在我的 OSGi 包 中为 Apache Sling 使用 slf4j 记录器

将依赖项和导入标记添加到 POM.xml 时,包仍处于 已解决 状态。

我是不是漏了什么?

Activator.class

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

    public class Activator implements BundleActivator {
    ...
    private final Logger log = LoggerFactory.getLogger(SampleServiceImpl.class);
    ...

POM.xml

<Import-Package>org.slf4j</Import-Package>
...
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.6</version>
            <scope>provided</scope>
        </dependency>

编辑 如果我注释掉 Logger 实例化并从 Activator.class 中删除导入,该服务将保持已解析状态。 在 POM 中删除有关 slf4 的行后,一切正常。

可能是你的Activator的start方法出现了异常。添加一个 try catch 并简单地将异常转储到 System.out 上以查看发生了什么。您是否还安装了一些像 pax-logging 一样处理 slf4j 日志记录的包?

我想您的 <Import-Package>org.slf4j</Import-Package> 语句会阻止导入其他必需的包。该元素的值应该是 org.slfj4.*,* 以便生成所有 "automatic" 导入。有关详细信息,请参阅 maven-bundle-plugin docs

但是,如果您的 pom 类似于 slingbucks sample 之类的 Sling 包,那么您无论如何都不需要这样的显式导入语句。