我正在使用log4j2(version-2.5),我正在尝试编写一个消息转换器插件,它将屏蔽一些日志消息的已知模式。如何屏蔽log4j2日志消息
@Plugin(name = "CustomeMasking",
category = "Converter")
@ConverterKeys({"m"})
public class MyCustomFilteringLayout extends LogEventPatternConverter {
}
当我运行我用这个插件的Web应用程序,然后我看到这个警告讯息
WARN转换键“M”已被映射到“类 org.apache.logging.log4j.core .pattern.MessagePatternConverter”。对不起, 戴夫,我不能让你这样做!忽略插件[类 MyCustomFilteringLayout]。
在浏览log4j2网站后,我找到了这些参考文献。
如果多个转换器指定相同ConverterKeys,则上面的负载 顺序决定哪一个将被使用。例如,要 覆盖由内置的 DatePatternConverter类提供的%日期转换器,您需要将插件放置在LOG4j-core.jar之前的CLASSPATH中的 JAR文件中。这不是建议的 ;模式ConverterKeys碰撞将导致警告 被发射。尝试使用独特的ConverterKeys为您的自定义模式 转换器。
我需要帮助了解如何为m/msg编写自定义转换器。有没有更好的方法来做到这一点?
附加信息: 我已经为MyCustomFilteringLayout创建了阴影罐。我这样做的原因是我想让屏蔽逻辑与应用程序分开。
更新
我创建转换为自己的钥匙,看起来像这样,
@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>
只是想知道,你能简单地使用另一个没有被现有转换器采用的密钥,并相应地改变你的日志模式吗? –
如果我这样做,那么我不会为我的密钥写多个转换器,我认为这不会解决我的使用案例。我的使用案例是,我想掩盖日志消息中的某些模式,我在想的是为不同场景创建多个转换器。我做错了吗?有没有更好的方法来做到这一点? – Shishir
我假设你想屏蔽日志事件中的数据,而不是阻止使用某些转换器密钥?为什么不使用不同的转换器密钥来编写自己的转换器呢?我不太了解你的陈述,你将无法编写多个转换器。也许你需要更好地解释你想达到的目标。 – rgoers