java - Log4j V2 自定义布局

标签 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 类已成为“最终”类,并且整个架构发生了变化。似乎不再有一种简单的方法来拦截/覆盖对 PatternLayout 对象的调用。我看了Apache documentation但没有太多信息。

我检查了this questionthis question但两人都无法提供太多帮助。

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

最佳答案

我认为您正在寻找的是 RewriteAppender 。来自手册:

The RewriteAppender allows the LogEvent to manipulated before it is processed by another Appender. This can be used to mask sensitive information such as passwords or to inject information into each event.

请引用this answer有关使用 RewriteAppender 屏蔽敏感内容的完整示例。

关于java - Log4j V2 自定义布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48176731/

相关文章:

java - 删除IntelliJ中的 "Project SDK"配置

java - MyBatis:使用 java 接口(interface)映射器获取受影响的行号

iis - 经典 ASP 上的 500 服务器错误 - 无法获得更多详细信息

java - Log4j。将日志放入 mongodb

java - 如何显示最后两位数字以使其变得有意义

c# - 如何在单例类中使用 transient 记录器,简单注入(inject)器

java - 升级到 Log4J2 面临异常。 [Java.lang.ClassNotFoundException : org. apache.logging.log4j.LogManager]

java - 如何解决-控制台错误日志无法写入Log4j2配置文件

java - Log4j2 看不到配置 xml

java - Java中聚合和组合的实现区别