Log4j2 (2.1) 自定义插件未被包属性检测到

问题描述 投票:0回答:2

我已将 log4j2 自定义插件打包到一个单独的 jar 中(仅包含插件类)并将其放入应用程序类路径中。但它没有被检测到。

我用谷歌搜索发现这是一个错误 - “packages”参数不再使用。另外,一些链接建议了一些替代方案,其中 maven pom.xml 和 log4j2 插件 dat 文件位于上下文中。问题是我对maven不熟悉,不知道dat文件是如何生成的。我只知道它包含在 log4j-2.1-core.jar 中,其中现有的 log4j2 插件在 pom.xml 中定义。

有人可以建议我如何让我的自定义插件工作吗?

我经历了这个 - Log4j2 自定义插件 - 使用 Maven Assembly Plugin 进行注释处理

但还不清楚。我正在遵循该解决方案,但不确定如何为自定义插件创建插件数据文件,或者不确定我到底需要在哪里进行更改..

java logging log4j log4j2
2个回答
8
投票

有两种方法可以让 log4j2 找到您的自定义插件:通过 packages 配置属性和通过 javac 生成的插件 dat 文件。

选项 1:packages 属性

log4j2 的旧版本中,packages 属性不再起作用,但这在 2.0.1 中已修复。这应该不再是问题了。

要使用此选项,请将插件类的包名称放入

packages
属性中。例如,如果您的插件的完全限定类名是
com.mycompany.myproduct.MyPlugin
,则使用

启动 log4j2.xml 配置文件
<Configuration status="trace" packages="com.mycompany.myproduct">
  ...

status="trace"
属性将显示控制台上显示的内部 log4j2 调试语句。这可能有助于解决任何问题,例如找不到您的插件。

选项2:插件dat文件

如果在类路径中使用 log4j-core jar 进行编译,javac 将生成 log4j2 插件 dat 文件。 Maven 会自动将其包含在您的 jar 中,但如果您不使用 maven,则可以手动将此文件包含在您的 jar 中。如有必要,再次使用 status="trace" 进行故障排除。

配置

完成上述任一操作后,log4j2 就可以找到您的插件。下一步是正确配置您的插件。这可能是导致问题的原因。

假设您的插件是自定义查找,如下所示:

package com.mycompany.myproduct;

@Plugin(name = "FabLookup", category = StrLookup.CATEGORY)
public class BetterLookup extends AbstractLookup {
    @Override
    public String lookup(final LogEvent event, final String key) {
        return com.mycompany.SomeClass.getValue(key);
    }
}

现在,您声明了插件的名称

FabLookup
,因此这就是您需要在配置中使用的名称。不是类名(尽管它们可以相同)。

使用您的插件的示例配置如下所示:

<Configuration status="trace" packages="com.mycompany.myproduct">
...
<Appenders>
<RollingFile name="RollingFile" fileName="logs/app.log"
             filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}.log.gz">

  <!-- use custom lookups to access arbitrary internal system info -->
  <PatternLayout header="${FabLookup:key1} ${FabLookup:key2}">
    <Pattern>%d %m%n</Pattern>
  </PatternLayout>
  <Policies>
    <TimeBasedTriggeringPolicy />
  </Policies>
</RollingFile>
...

如果上述不足以解决问题,请发布更多详细信息,例如您的插件在 java 代码中是如何声明的以及如何在 log4j2.xml 中配置的。


0
投票

对于那些使用带有自定义 log4j 插件的 Ant 构建脚本的人来说,有一个 Java 工具可以处理将注释生成的 Log4j2Plugins.dat 与项目库 Jars 中找到的任何内容合并,例如log4j-core 或其他。

通过 log4j 2.23.0 进行测试。不需要 Maven 和 Gradle。

查看 GitHub 项目:MergeLog4j2Plugins

© www.soinside.com 2019 - 2024. All rights reserved.