Spring Boot项目logback配置logstash encoder时如何掩码JSON日志敏感值
实现JSON日志敏感值掩码的两种方案
方案1:修正%replace正则配置(轻量场景适用)
你之前的配置不生效核心是两个问题:一是用了贪婪匹配.*会匹配到行尾所有内容,不是仅匹配Code对应的值;二是XML配置内的转义规则不符合要求。
修正后的配置如下:
"msg": "%replace(%msg){'\"Code\":\\s*\"[^\"]*\"', '\"Code\":\"xxx\"'}",
正则说明:[^\"]*会匹配到下一个双引号就停止,不会吞掉后续JSON内容;\\s*兼容键值之间有空格的情况。如果Code的值是数字类型,可将正则调整为:
"msg": "%replace(%msg){'\"Code\":\\s*\\d+', '\"Code\":xxx'}",
方案2:使用原生mask provider(多规则复杂场景适用)
如果需要掩码的敏感字段较多,可直接使用logstash logback自带的掩码provider,无需维护复杂正则,配置更易维护,完整示例如下:
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder"> <providers> <pattern> <pattern> { "creation_timestamp": "%d{yyyy-MM-dd'T'HH:mm:ss, UTC}", "msg": "%msg", "log_type": "%level" } </pattern> <omitEmptyFields>true</omitEmptyFields> </pattern> <!-- 新增掩码规则配置 --> <mask> <!-- 指定要做掩码处理的字段名 --> <fieldName>msg</fieldName> <values> <!-- 配置要匹配的规则,*为通配符 --> <value>"Code": "*"</value> <!-- 可新增多个<value>标签配置更多敏感字段 --> </values> <!-- 配置替换后的掩码值 --> <maskValue>"Code": "xxx"</maskValue> </mask> </providers> </encoder>
如果敏感字段是独立的结构化字段而非在msg内,直接修改<fieldName>为对应字段名即可。
内容的提问来源于stack exchange,提问作者DxG
相关产品推荐
相关产品推荐

