如何屏蔽log4j2日志消息

Shi*_*hir 5 java logging log4j log4j2

我正在使用log4j2(版本-2.5),我正在尝试编写一个消息转换器插件,它将掩盖日志消息的一些已知模式.

@Plugin(name = "CustomeMasking",
        category = "Converter")
@ConverterKeys({"m"})
public class MyCustomFilteringLayout extends LogEventPatternConverter {
}
Run Code Online (Sandbox Code Playgroud)

当我使用此插件运行我的Web应用程序时,我看到此警告消息

WARN转换器键'm'已映射到'class org.apache.logging.log4j.core.pattern.MessagePatternConverter'.对不起,戴夫,我不能让你那样做!忽略插件[类MyCustomFilteringLayout].

在探索log4j2网站后,我找到了这些参考资料.

参考

如果多个转换器指定相同的ConverterKeys,则上面的加载顺序将确定将使用哪个.例如,要覆盖由内置DatePatternConverter类提供的%date转换器,您需要将插件放在log4j-core.jar之前的CLASSPATH中的JAR文件中.不推荐这样做; 模式ConverterKeys冲突将导致发出警告.尝试将独特的ConverterKeys用于自定义模式转换器.

我需要帮助才能理解如何为m/msg编写自定义转换器.有没有更好的方法呢?

其他细节: 我为MyCustomFilteringLayout创建了阴影jar.我这样做的原因是我希望将屏蔽逻辑与应用程序分开.


更新

我为自己的密钥创建了转换器,看起来像这样,

@Plugin(name = "CustomeMasking",
            category = "Converter")
    @ConverterKeys({"cm"})
    public class MyCustomFilteringLayout extends LogEventPatternConverter {
    }
Run Code Online (Sandbox Code Playgroud)

在这里,我不能为同一个ConverterKeys写入另一个转换器 - 厘米?现在我的log4j2.xml有这个模式布局,

<PatternLayout>
                <Pattern>%d %p %c{1.} [%t] %cm %ex%n</Pattern>
            </PatternLayout> 
Run Code Online (Sandbox Code Playgroud)

Rem*_*pma 3

您的更新解决了该问题并回答了如何用自定义消息转换器替换内置消息转换器的问题。它需要一个唯一的密钥。

听起来你想参数化你的模式。许多模式都带有一个options参数。您可以使用它来控制行为,因此在布局模式中指定 %cm{key1} 将产生与 %cm{key2} 不同的结果。

有关采用参数的转换器的示例,请参阅 MdcPatternConverter 的源代码