如何在 log4j2 Java 属性文件中正确配置自定义 PatternSelector

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

我正在使用属性文件来配置 Log4j2,但无法弄清楚如何配置我的自定义 PatternSelector 插件。我的附加程序定义为:

appender.rolling.layout.type = MyCustomPatternSelector
appender.rolling.layout.defaultPattern = %d %p{length=5} [%t] %c{1} - %m%n
appender.rolling.layout.alternatePattern = %m%n

MyCustomPatternSelector 的前几行看起来像这样

@Plugin(name="MyCustomPatternSelector", category=Node.CATEGORY, elementType=PatternSelector.ELEMENT_TYPE, printObject = true)
public class MyCustomPatternSelector implements PatternSelector, LocationAware {

    public static class Builder implements org.apache.logging.log4j.core.util.Builder<MyCusstomPatternSelector> {

        @PluginBuilderAttribute("defaultPattern")
        private String defaultPattern;

        @PluginBuilderAttribute("alternatePattern")
        private String alternatePattern;

当我调用 Configurator.reconfigure 时,出现以下错误:

2024-01-18 14:38:28,306 main ERROR appender RollingFile has no parameter that matches element MyCustomPatternSelector

我发现的所有 PatternSelector 示例都是 XML 配置,因此我的属性显然是错误的。我的属性文件应该是什么样子?

我的 PatternSelector 插件正在加载,但附加程序最终使用默认布局,因为我的自定义模式选择器未添加到附加程序。

log4j2 properties-file
1个回答
0
投票

您的配置问题在于

PatternSelector
PatternLayout
不是
RollingFileAppender
的属性(参见
PatternLayout.Builder
)。

因此您需要将选择器向下移动一级:

appender.rolling.type = RollingFile
...
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.s.type = MyCustomPatternSelector
appender.rolling.layout.s.defaultPattern = %d %p{length=5} [%t] %c{1} - %m%n
appender.rolling.layout.s.alternatePattern = %m%n

备注:在即将推出的版本中

3.0.0-beta1
,您正在使用的属性配置将被删除并替换为基于
jackson-dataformat-properties
的属性配置(参见PR#2170)。

使用新的配置工厂,您的配置可能如下所示:

Appenders.RollingFile.PatternLayout.MyCustomPatterSelector.defaultPattern = %d %p{length=5} [%t] %c{1} - %m%n
Appenders.RollingFile.PatternLayout.MyCustomPatterSelector.alternatePattern = %m%n
© www.soinside.com 2019 - 2024. All rights reserved.