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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:54:05