<conversionRule conversionWord="mask" class="com.x.MaskConverter"/>
<pattern>%d %-5level %mask(%msg) %n</pattern>

排查登录问题时打开 debug,日志里出现完整手机号 13800138000,一天写了 40 万行,日志平台还能按号码检索。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。

追下去是这么回事:logback 的 pattern 只配了 %msg,业务代码自己拼字符串把号码带进去。脱敏写在 Controller 层,日志在 Service 层就已经打出来了。

围绕「手机号日志掩码」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。

把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。改完隔一天再看一次,当场正常不代表能稳住。

处理上按这个顺序:在 appender 上加自定义 converter 统一掩码;业务代码用占位符传参 不要拼串;关键字段在 toString 里就做掩码;上线前 grep 存量日志确认无残留。

确认没问题再收工,日志平台按完整号码搜不到结果 新写入的行全是掩码。

作者 9823189