我正在使用属性文件来配置 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 插件正在加载,但附加程序最终使用默认布局,因为我的自定义模式选择器未添加到附加程序。
您的配置问题在于
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