我需要过滤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 question和this question,但没有人提供太多帮助。
我意识到这是一个非常“普遍”的问题,但有没有人知道在Log4j V2中做这个的简单方法,或者对此有任何建议?
答案 0 :(得分:2)
我认为你要找的是RewriteAppender。从手册:
RewriteAppender允许LogEvent在被另一个Appender处理之前进行操作。这可用于屏蔽敏感信息(如密码)或将信息注入每个事件。
有关使用RewriteAppender屏蔽敏感内容的完整示例,请参阅this answer。