我需要过滤Log4j输出以从日志消息中删除“敏感”信息,例如密码。目标是执行以下操作:

更换:

05-Jan-2018 INFO [org.my.application] Username=Bob  Password=myWeakPassword


带有:

05-Jan-2018 INFO [org.my.application] Username=Bob  Password=*********


在Log4j V1中,通过扩展PatternLayout类,这很容易做到:

public class CustomPatternLayout extends org.apache.log4j.PatternLayout {
    @Override
    public String format(LoggingEvent event) {
        String temp = super.format(event);
        return doFilteringStuff(temp);
    }
}


但是,在Log4j V2中,将PatternLayout类设置为“最终”,并且更改了整个体系结构。似乎不再存在一种简单的方法来拦截/覆盖对PatternLayout对象的调用。我查看了Apache documentation,但没有太多信息。

我检查了this questionthis question,但是没有人提供太多帮助。

我意识到这是一个非常“笼统”的问题,但是没有人知道在Log4j V2中执行此操作的直接方法,或者对此有任何建议吗?

最佳答案

我认为您要查找的是RewriteAppender。从手册中:


  RewriteAppender允许在LogEvent被另一个Appender处理之前对其进行操作。这可用于掩盖敏感信息(例如密码)或将信息注入每个事件。


有关使用RewriteAppender屏蔽敏感内容的完整示例,请参考this answer

07-24 19:22
查看更多