运行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
相关产品推荐
相关产品推荐

