安全扫描在生产日志里扫出 2.3 万条 18 位身份证号,脱敏转换器配了三年,最近的日志里号码仍然是明文。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
<conversionRule conversionWord="mask" converterClass="com.acme.MaskConverter"/>
<pattern>%d{HH:mm:ss} %mask(%msg)%n</pattern>
脱敏规则挂在 console appender 上,文件 appender 用的是另一套 pattern,没有引用转换器。异步 appender 又包了一层,pattern 里的替换词被忽略。这一点先确认清楚,后面就不用反复试。
「日志身份证脱敏」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。
备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。
具体做法是,把脱敏转换器写进公共 pattern 所有 appender 共用;检查异步包装后 pattern 是否仍然生效;用一条测试日志验证控制台和文件都变成星号;扫描存量日志 确认历史文件按留存策略清理。
改完照着核一遍,新写入的日志里身份证号只剩前三位和后四位。
