Log4j OSGi的类加载问题

Log4j OSGi的类加载问题,log4j,osgi,classloader,apache-felix,Log4j,Osgi,Classloader,Apache Felix,我使用了Maven repo的log4j-1.2.17包。 我尝试在bundle中执行此代码(我的bundle调用log4j-1.2.17 bundle) 但我有错误 log4j:错误“org.apache.log4j.dailrollingfileappender”对象不能分配给“org.apache.log4j.Appender”变量。 log4j:错误类“org.apache.log4j.Appender”是由 log4j:ERROR[org.apache.felix.framework。

我使用了Maven repo的log4j-1.2.17包。 我尝试在bundle中执行此代码(我的bundle调用log4j-1.2.17 bundle)

但我有错误

log4j:错误“org.apache.log4j.dailrollingfileappender”对象不能分配给“org.apache.log4j.Appender”变量。
log4j:错误类“org.apache.log4j.Appender”是由
log4j:ERROR[org.apache.felix.framework。BundleWiringImpl@9da1dd]而类型为
log4j:[sun.misc.Launcher]加载了错误“org.apache.log4j.DailyRollingFileAppender”$AppClassLoader@4b222f].
log4j:错误无法实例化名为“R”的追加器。
log4j:错误“org.apache.log4j.dailrollingfileappender”对象不能分配给“org.apache.log4j.Appender”变量。
log4j:错误类“org.apache.log4j.Appender”是由
log4j:ERROR[org.apache.felix.framework。BundleWiringImpl@9da1dd]而类型为
log4j:[sun.misc.Launcher]加载了错误“org.apache.log4j.DailyRollingFileAppender”$AppClassLoader@4b222f].
log4j:错误无法实例化名为“R”的追加器。

捆绑包已按顺序加载

.getBundleContext().installBundle("......../log4j-1.2.17.jar")
.getBundleContext().installBundle("......../I_MainForm-1.0-SNAPSHOT.jar")
如何修复此错误? 请原谅我的英语。
向您致意,Arthur。

由于您的Log4j类似乎是由
sun.misc
类加载器加载的,我认为有东西从OSGi外部提供Log4j类。有Log4J条目解释了为什么它不能加载Log4J类,这意味着Log4J的某些版本已经存在了

您使用的是定制版本的Felix吗?如果是这样的话,您可以找到类似配置文件的内容,其中包含
org.osgi.framework.system.packages=…
条目或
org.osgi.framework.system.packages.extra=…
条目

如果只是删除Log4j包会发生什么?那么它还能找到Log4j类吗


请注意,Frank在自己的代码中设置log4j在OSGi中不是一个好主意。您应该看看ops4j pax日志记录。它负责日志框架的设置,您只需在包中使用log4japi即可。请参阅:

基本上,不要使用
org.osgi.framework.system.packages
org.osgi.framework.system.packages.extra
将您的类“泄漏”到框架中,除非您确实需要在代码中插入,而不是修复一些其他问题。显然,这是log4j的问题

您可以通过设置系统属性来修复它:

-Dlog4j.ignoreTCL=true 

你好是的,这是我的错误-主应用程序(加载器应用程序)有log4j lib(而不是bundle)。删除此库后,执行选项现在未显示。对不起,我的英语不好。谢谢。@user913766:请用左边的勾号接受正确答案。
-Dlog4j.ignoreTCL=true