我想从使用基于文件大小的RollingFileAppender更改为使用log4j 1.2.17的DailyRollingFileAppender,但是文档中说该appender存在已知的同步问题,应该使用log4j extras包中的appender(我知道log4j 2可用,并且没有任何已知的相关问题)。
当我用downloaded from the Apache site的log4j-extras-1.2.17替换常规的log4j-1.2.17 jar时,我在org.apache.log4j.or.RendererMap
上得到一个ClassNotFoundException。我可以看到它确实存在于常规包中,但不存在于extras中。我知道常规包被标记为extras包的依赖项,但是Apache站点(和Maven Central)上的extras下载似乎是一个捆绑包。如果我也要包含常规的log4j包,那么如何阻止类加载器使用常规包而不是extras中的损坏的appender类呢?
如何使用此库?
我已经升级到了2.x API,因为我可以使用兼容性桥。我仍然很想知道为什么它不起作用。是它根本上坏了还是我遗漏了什么?
1条答案
按热度按时间nkoocmlb1#
正如您已经注意到的,
apache-log4j-extras
是由maven-bundle-plugin
创建的OSGI包。由于一个Java包只能由一个OSGI包提供,因此
apache-log4j-extras
包含了两个项目共享包中所有log4j
类的副本。apache-log4j-extras
不包含特定于log4j
的软件包,如org.apache.log4j.or
。即使这两个工件共享类,这也不构成问题:共享类是相同的。只有当您使用不匹配的
log4j
和apache-log4j-extras
版本时,才会出现问题。备注:您可能指的是
log4j
中的“损坏”类org.apache.log4j.RollingFileAppender
,它的完全限定类名与apache-log4j-extras
提供的类名不同(org.apache.log4j.rolling.RollingFileAppender
,请注意名称中的rolling
部分)。