如何屏蔽log4j2日志消息

时间:2016-04-29 03:05:51

标签: java logging log4j log4j2

我正在使用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网站后,我找到了这些参考文献。

Reference

  

如果多个转换器指定相同的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> 

1 个答案:

答案 0 :(得分:3)

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

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

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

相关问题