这是我的情况。我能够在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库。
答案 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会导致此错误。当我删除时,该异常消失了。