我正在使用log4j2(版本-2.5),我正在尝试编写一个消息转换器插件,它将掩盖一些已知的日志消息模式。
@Plugin(name = "CustomeMasking",
category = "Converter")
@ConverterKeys({"m"})
public class MyCustomFilteringLayout extends LogEventPatternConverter {
}
当我使用此插件运行我的Web应用程序时,我会看到此警告消息
WARN转换器密钥' m'已经映射到'类 org.apache.logging.log4j.core.pattern.MessagePatternConverter&#39 ;.抱歉, 戴夫,我不能让你这样做!忽略插件[类 MyCustomFilteringLayout]。
在浏览log4j2网站后,我找到了这些参考文献。
如果多个转换器指定相同的ConverterKeys,则加载 以上订单确定将使用哪一个。例如,到 覆盖内置提供的%date转换器 DatePatternConverter类,你需要将你的插件放在一个 在log4j-core.jar之前的CLASSPATH中的JAR文件。这不是 推荐的;模式ConverterKeys冲突将导致警告 被释放。尝试使用独特的ConverterKeys作为自定义模式 转换器。
我需要帮助才能了解如何为m / msg编写自定义转换器。有没有更好的方法呢?
其他详细信息: 我为MyCustomFilteringLayout创建了阴影jar。我这样做的原因是我希望将屏蔽逻辑与应用程序分开。
更新
我为自己的密钥创建了转换器,看起来像这样,
@Plugin(name = "CustomeMasking",
category = "Converter")
@ConverterKeys({"cm"})
public class MyCustomFilteringLayout extends LogEventPatternConverter {
}
在这里,我无法为同一个ConverterKeys写入另一个转换器 - 厘米? 现在我的log4j2.xml有这种模式布局,
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %cm %ex%n</Pattern>
</PatternLayout>
答案 0 :(得分:3)
您的更新解决了问题,并回答了如何使用自定义消息转换器替换内置消息转换器的问题。它需要一个唯一的密钥。
听起来你想要参数化你的模式。许多模式都采用options
参数。您可以使用它来控制行为,因此在布局模式中指定%cm {key1}将产生与%cm {key2}不同的结果。
有关采用参数的转换器的示例,请参阅MdcPatternConverter的源代码。