如何将 pax-logging-service 替换为 pax-logging-log4j2 和最新的 KARAF



我们将OSGI KARAF升级到4.1.x版本,并且默认的pax-logging-api实现已从log4j1更改为Log4J2。

在早期的 log4j1 中,我们曾经有一个自定义追加器,它扩展了文件追加器并从 CFG 文件中获取配置。 我们确实将此追加器编译为片段,并提供片段主机捆绑包作为 pax-logging-service 进行加载。

现在有了 log4J2,创建自定义追加器似乎非常不同。我经历了这个问题 如何在log4j2中创建自定义追加器?

这很有帮助,但我并不完全清楚现在如何加载它?

它将如何像之前从 CFG 文件中获取的那样获取配置参数?

我们仍然可以用作片段并在此处提及片段主机捆绑包以使其正常工作吗?

问候 穆尼什

我不知道Munish Gupta是否解决了这个问题。 只需为搜索问题的人写下解决方案即可。 我花了这么长时间才解决它。

  • 首先,在我们自己的捆绑包中编写我们的自定义追加器。log4j2 中的追加器是一个插件,因此我们必须添加注释@Plugin和@PluginFactory。看看这个问题:

    如何在log4j2中创建自定义追加器?

  • 其次,生成插件.dat文件。根据 log4j2 手册,插件.dat将自动生成。

    但是当我编写自己的追加器时,它不会生成插件.dat。然后我们需要在我们的pom中添加这个配置.xml

    <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <executions> <execution> <id>log4j-plugin-processor</id> <goals> <goal>compile</goal> </goals> <phase>process-classes</phase> <configuration> <proc>only</proc> <annotationProcessors> <annotationProcessor> org.apache.logging.log4j.core.config.plugins.processor.PluginProcessor </annotationProcessor> </annotationProcessors> </configuration> </execution> </executions> </plugin>

    官方手册:log4j2

    插件
  • 第三,我们需要修改 maven-bundle-plugin(BND),生成的插件.dat不会出现在最终的 jar 中。BND常见问题解答已经说过了。我们需要使用标签。这是配置。

    <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <version>3.3.0</version> <extensions>true</extensions> <configuration> <instructions> <Include-Resource>META-INF=${project.build.directory}/classes/META-INF</Include-Resource> </instructions> </configuration> </plugin>

    BND常见问题

  • 第四,将我们的自定义追加器包注册为片段,片段主机为 pax-logging-log4j2。

    <configuration> <instructions> <Bundle-Name>${project.artifactId}</Bundle-Name> <Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName> <Bundle-Version>${project.version}</Bundle-Version> <Export-Package>com.good.gcs.core.logging</Export-Package> <Import-Package>!*</Import-Package> <Fragment-Host>org.ops4j.pax.logging.pax-logging-log4j2</Fragment-Host> <_failok>true</_failok> </instructions> </configuration>

    参考:Log4j 将捆绑包注册为片段

最新更新