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

Logstash logback encoder无法掩码嵌套字段该如何解决?

问题根因

MaskingJsonGeneratorDecorator默认仅遍历日志的结构化JSON字段做掩码匹配,你通过Markers.appendRaw()传入的body是原始JSON字符串类型,编码器不会主动解析字符串内部的JSON结构,因此无法匹配到嵌套的password字段。

解决方法

方案1(更推荐):使用结构化传值

将Markers.appendRaw("body", json字符串)替换为Markers.appendObject("body", 对应Java对象),直接传入结构化的body对象,让编码器完成整体序列化,此时装饰器可完整遍历所有层级字段。
对应配置匹配路径:

<path>/body/*/password</path>

方案2(保留appendRaw用法):开启原始值解析

如果必须使用appendRaw,只需在装饰器配置中添加parseRawValues属性开启raw字符串内部解析即可,修改后的完整配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="net.logstash.logback.encoder.LogstashEncoder">
            <jsonGeneratorDecorator class="net.logstash.logback.mask.MaskingJsonGeneratorDecorator">
                  <defaultMask>****</defaultMask>
                  <!-- 开启对raw类型值的JSON解析 -->
                  <parseRawValues>true</parseRawValues>
                  <!-- 匹配body数组下所有元素的password字段 -->
                  <path>/body/*/password</path>
                  <!-- 如需全局匹配所有层级的password字段,可改用下方配置 -->
                  <!-- <path>**/password</path> -->
            </jsonGeneratorDecorator>
            <fieldNames>
                <timestamp>timestamp</timestamp>
                <message>message</message>
                <version>[ignore]</version>
                <levelValue>[ignore]</levelValue>
            </fieldNames>
        </encoder>
    </appender>
    <root level="info">
        <appender-ref ref="CONSOLE"/>
    </root>
</configuration>

两种方案都可以实现你预期的掩码效果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:06:02