如何使用ServiceMix进行logback(日志库)(Karaf + ops4j logging)

时间:2012-03-20 20:33:26

标签: logging logback slf4j apache-karaf apache-servicemix

我正在尝试使用ServiceMix 4.3.0(karaf 2.1.3)进行回归,但没有成功。有没有人已经成功地使它工作? (使用任何版本的serviceMix + slf4j + logback)

这是我的情况。我能够在Tomcat中使(Logback + slf4j +我的应用程序)一起工作。现在我想让它们在ServiceMix中一起工作。 ServiceMix使用OPS4J(org.ops4j.pax.logging)来提供slf4j(1.5.11)。所以,我必须使用ServiceMix提供的slf4j(我不必安装新的slf4j软件包),接下来我安装了Logback Core Module(0.9.20),Logback Classic Module(0.9.20),jcl-over-slf4j(1.5) .11)为了使slf4j和logback一起工作。安装很好,没有错误。 在我的应用程序中,我有一个代码片段来从外部文件夹中读取logback.xml。

fis = new FileInputStream(System.getProperty("logconf") + "/logback.xml");
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
JoranConfigurator configurator = new JoranConfigurator();
configurator.setContext(lc);
lc.reset();
configurator.doConfigure(fis);

但是每当运行此代码时,我总是会收到此错误:

java.lang.ClassCastException: org.ops4j.pax.logging.slf4j.Slf4jLoggerFactory无法强制转换为ch.qos.logback.classic.LoggerContext

因此我认为ServiceMix提供的slf4j不适用于logback库。

2 个答案:

答案 0 :(得分:3)

尚未发布的Pax-Logging 1.7具有Logback支持。见https://github.com/ops4j/org.ops4j.pax.logging

您尝试做的事情永远不会与Pax-Logging一起使用,因为Pax故意包装记录器工厂以允许运行时注入日志记录提供程序。相反,如果您使用Pax-Logging 1.7(某天),那么您将通过指向logback.xml的org.ops4j.pax.logging.cfg文件执行logback配置。

答案 1 :(得分:0)

我得到了类似的错误,后来注意到我需要在我的osgi包中重新安装我的导入。在logback之后导入slf4j会导致此错误。当我删除时,该异常消失了。