【log4j2日志框架】敏感字符过滤

it2025-02-07  10

0、背景

zookeeper服务端所使用的日志框架被我替换为了log4j2,zk的sessionid又被负责安全的大佬评估为敏感信息,不能直接打印,所以要想一个在不修改源码的情况快速解决sessionid打印屏蔽的办法。

1、log4j2的replace功能

很多日志框架都有过滤替换的功能,log4j2也不例外,支持正则替换。 先看zk的sessionid生成方法 sessionid高位为服务id,中间为时间戳,低位为递增序列,最大值为Long的最大值。

log4j2.properties的pattern中增加正则表达式

appender.rolling.layout.pattern = %d %p %c{1.} [%t] %replace{%msg}{0x[a-f0-9]{15,}|0x0}{0x*} -%replace{%ex}{0x[a-f0-9]{15,}|0x0}{0x*}%n appender.rolling.layout.alwaysWriteExceptions=false

这里不仅replace了msg,还replace了ex,因为log4j2中异常是单独区分的,正常日志和异常日志中均有可能出现sessionid,因此要同时对msg和ex配置replace。appender.rolling.layout.alwaysWriteExceptions默认是开启的,既然已经在pattern中配置了ex就要关闭alwaysWriteExceptions。 最终完美替换所有sessionid为0x*

最新回复(0)