gpt4 book ai didi

java - Log4j 2.8 无法在 OSGi 环境中加载自定义转换器

转载 作者:行者123 更新时间:2023-12-01 08:57:37 26 4
gpt4 key购买 nike

我目前正在切换到 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)。
插件实现已注释,并且 newInstanceformat 方法根据 this guide 实现

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

log4j-core-2.8.jar 包在 Equinox 容器启动时与 log4j-api-2.8.jar 一起激活。配置文件由系统属性指向并且可以工作(显然来 self 收到的调试消息)。

但是,我发现this issue报告了 log4j Jira,这是我的问题,因为我遇到了同样的异常,直到我修改了 log4j-api-2.8.jar 以使其导入 org.apache.logging.log4j。 core.util 包,这样我的服务器就能正常启动。有一些评论表明这可能会导致 OSGi 中 log4j2 的不可扩展性。

那么有什么方法可以解决这个问题(快速修复就足够了)?或者,我可能忘记在这里配置一些东西吗?

非常感谢您的帮助。

最佳答案

好的,所以我要为自己回答这个问题,也许它也会对某人有所帮助。我玩了很多次,问题出在 OSGi 上,老实说,我对它不太熟悉。

我最终发现你必须确保这些事情:

  • 该 bundle 必须在 OSGi 容器中激活。不扫描非 Activity 包中的插件。事实上,您在配置中将 bundle 标记为激活并不一定意味着它实际上会发生。例如,我的包 list 中的一些错误阻止了这种情况的发生。所以为了确保我构建 bundle
    导出包:common.audit.sink.impl.log4j2.*
    导入包:*
  • 至少必须满足以下条件之一才能加载您的插件:
    • 您的自定义插件包是 log4j-core 的一个片段,在其 list 中声明:
      片段主机:org.apache.logging.log4j.core
      也许是正确的方法。
    • 您的 bundle 的激活优先级与 log4j bundle 相同(不仅 API 还需要激活 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].

关于java - Log4j 2.8 无法在 OSGi 环境中加载自定义转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41938128/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com