You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则替换指定前缀字符串?Spring Boot日志多字段脱敏实现

多字段日志脱敏的正则解决方案

嘿,这个场景我之前做Spring Boot项目时也碰到过,单字段替换确实满足不了多敏感字段的需求,用正则的分组+交替匹配就能轻松搞定!

核心配置示例

直接把你的logging.pattern.console改成下面这样,一次性覆盖所有需要脱敏的字段:

logging.pattern.console=%replace(%msg){'(password|credit_card_number|ccv|ssn)=[^&\\s]*', '$1=xxx'}%n

正则逻辑拆解

我给你拆解下这个正则的作用,方便你根据自己的日志格式调整:

  • (password|credit_card_number|ccv|ssn):用括号把所有需要脱敏的关键词包起来,|表示“或”,匹配任意一个指定关键词
  • =:精准匹配关键词后面的等号
  • [^&\\s]*:匹配等号后面的所有内容,直到遇到&(HTTP请求参数的分隔符)或者空白符(日志里的字段分隔)才停止,[^...]表示“不包含这些字符”,*表示匹配零个或多个字符
  • $1=xxx:替换规则,$1会保留匹配到的原关键词(比如credit_card_number),然后把后面的值替换成xxx,这样日志里还能看到是哪个字段被脱敏了,方便后续排查问题

适配不同日志格式的小技巧

如果你的日志里键值对的分隔符不是&(比如用逗号、分号或者其他符号),只需要修改正则里的[^&\\s]部分就行:

  • 比如用逗号分隔:把[^&\\s]改成[^,\\s]
  • 如果是纯空格分隔:可以直接写成[^\\s]*

要是你用的是YAML配置文件,注意转义的问题,用单引号包裹正则就不会有转义坑:

logging:
  pattern:
    console: "%replace(%msg){'(password|credit_card_number|ccv|ssn)=[^&\\s]*', '$1=xxx'}%n"

进阶:自定义脱敏规则(可选)

如果之后需要更精细的脱敏(比如银行卡号保留前4位后4位),可以调整替换的分组逻辑,比如:

logging.pattern.console=%replace(%msg){'(credit_card_number)=([0-9]{4})[0-9]*([0-9]{4})', '$1=$2****$3'}%n

这样日志里就会显示credit_card_number=1234****5678,既脱敏又保留了辨识度~

内容的提问来源于stack exchange,提问作者Nicole Naumann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:57:34