Log4j V2自定义布局

时间:2018-01-09 21:13:59

标签: java logging log4j2

我需要过滤Log4j输出以从日志消息中删除密码等“敏感”信息。目标是做这样的事情:

替换:

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

使用:

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

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

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类被设为“final”,整个架构也发生了变化。似乎没有一种简单的方法来拦截/覆盖对PatternLayout对象的调用。我查看了Apache documentation,但信息不多。

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

我意识到这是一个非常“普遍”的问题,但有没有人知道在Log4j V2中做这个的简单方法,或者对此有任何建议?

1 个答案:

答案 0 :(得分:2)

我认为你要找的是RewriteAppender。从手册:

  

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

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

相关问题