我目前正在切换到log4j2,而我正在OSGi环境中工作。 log4j 2.7分支中的OSGi存在几个问题,这鼓励我将2.8作为最终库 问题是我在我的项目中实现了几个自定义PatternConverters,我无法让它们加载和识别
DEBUG Initializing configuration XmlConfiguration[location=C:\Program Files\...\etc\log4j2.xml]
.
.
DEBUG Took 0,001043 seconds to load 0 plugins from package common.audit.sink.impl.log4j2.converter
尽管其中至少有10个。以后会导致错误,如:
DEBUG Building Plugin[name=layout, class=org.apache.logging.log4j.core.layout.PatternLayout].
DEBUG PatternLayout$Builder(pattern="%ED;...
ERROR Unrecognized format specifier [ED]
ERROR Unrecognized conversion specifier [ED] starting at position 3 in conversion pattern.
我几乎所有设置都必要(无论如何都适用于2.7) 插件实现已注释,并且根据this guide
实现了 newInstance , format 方法log4j2.xml中的包声明:
<Configuration status="trace" name="Systemtest_Server" packages="common.audit.sink.impl.log4j2.converter">
插件元数据生成并出现在包含插件的* .jar包中
META-INF\org\apache\logging\log4j\core\config\plugins\Log4j2Plugins.dat
在Equinox容器启动时,log4j-core-2.8.jar包与log4j-api-2.8.jar一起激活。配置文件由系统属性指向并且有效(显然来自我收到的调试消息)。
但是,我在log4j Jira上发现了this issue,这是我的问题,因为我在修改 log4j-api-2.8.jar 之前遇到了同样的异常导入 org.apache.logging.log4j.core.util 包,这样我的服务器就可以正常启动了。有一些评论表明这可能导致OSGi中log4j2的不可扩展性。
那么有什么方法可以解决这个问题(快速修复就足够了)?或者,有什么我可能忘记在这里配置?
非常感谢您的帮助。
答案 0 :(得分:1)
好的,所以我会为自己回答这个问题,也许这对某些人也有帮助。老实说,我做了很多游戏,故障发生在OSGi中,我并不熟悉它。
我最终发现你必须确保这些事情:
Export-Package: common.audit.sink.impl.log4j2.*
Import-Package: *
Fragment-Host: org.apache.logging.log4j.core
当然,我的问题中提到的配置也是必需的。在此之后我没有错误,看到了这样的痕迹:
DEBUG Oracle Nashorn Version: 1.8.0_102, Language: ECMAScript, Threading: Not Thread Safe, Compile: true, Names: {nashorn, Nashorn, js, JS, JavaScript, javascript, ECMAScript, ecmascript}
DEBUG Took 0,008133 seconds to load 16 plugins from package common.audit.sink.impl.log4j2.converter
DEBUG PluginManager 'Core' found 112 plugins
DEBUG PluginManager 'Level' found 0 plugins
...
DEBUG Building Plugin[name=layout, class=org.apache.logging.log4j.core.layout.PatternLayout].
DEBUG PatternLayout$Builder(pattern="%ED;%EU;%EL;...
DEBUG Building Plugin[name=appender, class=org.apache.logging.log4j.core.appender.FileAppender].