使用sl4j从eclipse osgi插件中记录

时间:2016-02-05 14:09:58

标签: java eclipse logging osgi slf4j

我使用了我的eclipse(luna)osgi包中的sl4j。一切都很好,直到我升级到日食火星。 我在某个地方弄坏了东西,我无法弄清楚我做错了什么。

几个小时后我想把所有东西都放回去,我决定写一个简单的osgi包来测试我认为我想的机制。

我正在浏览新的osgi向导并创建这个简单的包:

清单是:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Service
Bundle-SymbolicName: service
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: service.Activator
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Import-Package: org.osgi.framework;version="1.3.0",
 org.slf4j
Require-Bundle: ch.qos.logback.classic,
 ch.qos.logback.core

,Activator代码为:

public class Activator implements BundleActivator {
private Logger logger=LoggerFactory.getLogger(this.getClass());

public void start(BundleContext context) throws Exception {
    System.out.println("Hello World!!");
    logger.error("logging error {}", this);
}

public void stop(BundleContext context) throws Exception {
    System.out.println("Goodbye World!!");
}

}

我在Activator.java旁边放了一个logback.xml配置文件。

但我仍然遇到众所周知的消息:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Hello World!!

当我将bundle作为OSGI Framework调试目标运行时。

我检查了这个网址,以及stackexchange和其他网站上的帖子,但我看不出有什么问题。

我知道它必须是一个如此简单的故障,我无法看到它。

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

您不需要Require-Bundle进行回溯,因为您的bundle不直接依赖于logback。在运行时,您必须确保已安装了logback并且未安装slf4j-api。

另请参阅this post了解如何在OSGi中配置logback。

答案 1 :(得分:2)

@Christian:谢谢,你的回答引导我找到解决方案 Eclipse Mars默认分发中的ch.qos.logback.slf4j包似乎缺少缺失

配置Eclipse以使用Orbit http://download.eclipse.org/tools/orbit/downloads/drops/R20151221205849/ P2存储库(在编辑目标首选项中)后,可以添加缺少的包,现在我的测试成功。