Karaf bundle在运行时找不到Log4j LogManager.class。

时间:2017-10-21 19:51:01

标签: logging log4j karaf pax

目前我正在开展一个项目,我需要将第三方JAR传播到我们的Karaf D-OSGi应用程序中。我们不打算更改jar中的任何代码,但是使用有限的源代码我们可以调试它。

问题是第三方jar依赖于log4j-1.2.9 jar。但是当在运行时调用第三方jar时,无法从第三方jar中找到logManager.class。

这是Karaf的例外日志。

karaf@root()> lde

org.apache.cxf.interceptor.Fault:org / apache / log4j / LogManager         在org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:162)[166:org.apache.cxf.cxf-core:3.1.7]         在org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:128)[166:org.apache.cxf.cxf-core:3.1.7]         ... org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)[115:org.eclipse.jetty.util:9.2.19.v20160908]         在org.eclipse.jetty.util.thread.QueuedThreadPool $ 3.run(QueuedThreadPool.java:555)[115:org.eclipse.jetty.util:9.2.19.v20160908]         在java.lang.Thread.run(Thread.java:745)[:1.8.0_25] 引起:java.lang.NoClassDefFoundError:org / apache / log4j / LogManager         在com.p ******* h.eis.tools.logging.LoggingSetup.isConfigured(LoggingSetup.java:77)         在com.p ******* ho **** l.sdk.configurator.Configurator.checkLogging(Configurator.java:623)(------------在第三方jar中------------------)         在com.p ******* h.o **** l.sdk.configurator.Configurator.load(Configurator.java:383)         在com.p ******* h.o **** l.sdk.configurator.Configurator.getInstance(Configurator.java:72)         在com.p ******* h.o **** l.sdk.transactionProcessor.TransactionProcessor。(TransactionProcessor.java:43)         at ca.esc.pbm.integr.chase.provider.service.PbmChaseApiImpl.getCCtokenFromChasePaymentGateWay(pBmChaseApiImpl.java:98)

    ... 36 more

引起:org.ops4j.pax.logx.pax-logging-api [1]找不到java.lang.ClassNotFoundException:org.apache.log4j.LogManager         在org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1574)         在org.apache.felix.framework.BundleWiringImpl.access $ 400(BundleWiringImpl.java:79)         ...         ......还有50个

karaf @根()>

在包中,pom.xml具有log4j 1.2.8依赖性。  在bnd.bnd,Export-Package:org.apache.log4j。*,.....

我已经从maven检查了生成的bundle jar,log4j包/ jar被导入到bundle和Karaf运行时。

我进行了一些调试/研究,看起来像Pax记录器接管/委托Log4j,它从包中隐藏了LogManager。

另外,我试图直接从捆绑中调用LogManager而不涉及第三方Jar,我得到了无法找到LogManager.class的相同异常。

我理解Karaf使用Pax logger进行日志记录并将log4j实现委托给Pax,但在我的情况下,如何让不可触及的Jar类成功调用LogManager?

由于

保罗·N。

1 个答案:

答案 0 :(得分:0)

你可以检查的事情:

在类路径中搜索具有logmanager类的jar文件,并尝试使用chase特定的log4j jar文件覆盖。