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

运行SLF4J+MDC程序时日志未显示MDC属性的问题求助

MDC属性未显示的解决方法

问题原因

你已通过MDC.put()正确存入user属性,但日志输出未显示该内容,核心原因是日志框架的格式配置未包含MDC的user字段——SLF4J仅作为日志门面,实际日志输出格式由底层日志实现(如Logback、Log4j2)决定。

具体配置示例

1. 若使用Logback(SLF4J最常用底层实现)

修改项目中的logback.xml配置文件,在<encoder>的pattern参数中添加%X{user}(X代表MDC,括号内为你存入的属性key):

<configuration>
  <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <!-- 按需调整%X{user}的位置即可 -->
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %X{user} - %msg%n</pattern>
    </encoder>
  </appender>

  <root level="info">
    <appender-ref ref="CONSOLE" />
  </root>
</configuration>

2. 若使用Log4j2

修改项目中的log4j2.xml配置文件,在PatternLayout的pattern参数中添加%X{user}:

<Configuration status="WARN">
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %X{user} - %msg%n"/>
    </Console>
  </Appenders>
  <Loggers>
    <Root level="info">
      <AppenderRef ref="Console"/>
    </Root>
  </Loggers>
</Configuration>

验证效果

配置完成后重新运行程序,日志输出会包含MDC属性内容,示例如下:

14:35:22.123 [main] INFO com.example.SLF4JMDC - rafal.kuc@sematext.com - This is an info level log message!
14:35:22.125 [main] WARN com.example.SLF4JMDC - rafal.kuc@sematext.com - This is an WARN level log

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 14:20:35