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

logback配置中Logstash Appender无法读取MDC值问题咨询

问题原因

  • 你在customFields中使用的${mdcFieldKey}是Logback/Spring的静态属性占位符,只会在配置文件加载阶段一次性解析,读取的是系统属性、环境变量、application配置文件里的预定义属性,不能读取动态的线程级MDC变量
  • MDC的值是每个请求/线程独立的动态变量,会随不同的日志事件变化,和全局静态的customFields设计定位不匹配
  • 而ConsoleAppender的pattern里用的%X{mdcFieldKey}是日志事件渲染阶段专门读取MDC的语法,所以可以正常取值

解决方法

方法1:直接使用默认MDC输出(无需额外配置)

LogstashEncoder默认会自动将所有MDC中的键值对添加到输出的JSON结构中,你直接删掉customFields里的"someName":"${mdcFieldKey}"配置即可,输出的JSON里会直接出现mdcFieldKey字段,值就是你MDC里放的内容。

方法2:自定义MDC字段映射名称

如果你需要把MDC中的mdcFieldKey改名为someName输出,可以新增MdcJsonProvider配置,修改你的Logstash appender配置如下:

<appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
    <destination>kibanaurl:port</destination>
    <encoder class="net.logstash.logback.encoder.LogstashEncoder">
        <customFields>
            {
            "application-name":"${spring.application.name}",
            "dummyName":"dummyValue"
            }
        </customFields>
        <provider class="net.logstash.logback.composite.loggingevent.ArgumentsJsonProvider"/>
        <!-- 新增MDC字段映射配置 -->
        <provider class="net.logstash.logback.composite.loggingevent.MdcJsonProvider">
            <addMdcKeyName>
                <from>mdcFieldKey</from>
                <to>someName</to>
            </addMdcKeyName>
            <!-- 如果不需要保留原mdcFieldKey字段,可以加上下面这行 -->
            <!-- <excludeMdcKeyName>mdcFieldKey</excludeMdcKeyName> -->
        </provider>
    </encoder>
</appender>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:45:04