如何解决 Logback 中 MDC.put 值未显示在日志中的问题
发布时间 - 2025-12-29 00:00:00 点击率:次logback 的 mdc(mapped diagnostic context)值未出现在日志中,通常是因为配置中错误地使用了 `
在你的 logback.xml 中,当前使用的是
%d [%X{ApigeeId}] [%X{BasePath}] %-5level %-50logger{40} - %message%n
⚠️ 关键问题:Logback 自 1.3.0 版本起(且在所有主流 1.2.x+ 版本中),
✅ 正确写法是改用
%d [%X{ApigeeId}] [%X{BasePath}] %-5level %-50logger{40} - %message%n
? 验证提示:MDC.get("ApigeeId") 能取到值,说明 MDC 上下文设置无误(线程内有效),问题纯属日志渲染配置缺失。
? 额外注意事项:
- 确保 MDC.put() 在日志语句执行之前调用(例如在请求拦截器、AOP 前置通知或 Controller 入口处设置);
- 若使用异步日志(如 AsyncAppender),需启用 includeCallerData="true" 或显式调用 MDC.copy() 到子线程(因 MDC 是 InheritableThreadLocal,但某些线程池可能不继承);
- 清理旧 MDC 值:建议在请求结束时调用 MDC.clear(),避免线程复用导致脏数据(尤其在 Tomcat 等容器中)。
✅ 完整可运行示例(含清理逻辑):
// 示例:Spring Boot 拦截器中设置 MDC
public class MdcInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
MDC.put("ApigeeId", request.getHeader("X-Apigee-Id"));
MDC.put("BasePath", request.getServletPath());
return true;
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
MDC.clear(); // 必须清理!
}
}完成配置更新后重启应用,日志将正确输出类似:
2025-01-11 13:13:09,286 [a1b2c3] [api/crm/sendemi] INFO org.hibernate.SQL_SLOW - SlowQuery: 14 ms...
总结:MDC 不是“不工作”,而是 Logback 的 pattern 解析机制有明确上下文约束——认准
# app
# tomcat
# logback
# xml
# 继承
# 线程
# copy
# 异步
# 的是
# 是因为
# 出现在
# 不支持
# 而非
# 能不
# 重启
# 结束时
# 复用
# 器中
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Java类加载基本过程详细介绍
微信小程序 闭包写法详细介绍
千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】
移动端脚本框架Hammer.js
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口
Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】
香港服务器WordPress建站指南:SEO优化与高效部署策略
如何快速生成专业多端适配建站电话?
如何在IIS管理器中快速创建并配置网站?
如何快速登录WAP自助建站平台?
ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
浅析上传头像示例及其注意事项
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
百度浏览器网页无法复制文字怎么办 百度浏览器复制修复
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
如何用wdcp快速搭建高效网站?
Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
想要更高端的建设网站,这些原则一定要坚持!
焦点电影公司作品,电影焦点结局是什么?
Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理
Laravel怎么实现验证码(Captcha)功能
七夕网站制作视频,七夕大促活动怎么报名?
魔毅自助建站系统:模板定制与SEO优化一键生成指南
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
如何在香港免费服务器上快速搭建网站?
Laravel如何处理文件下载请求?(Response示例)
Laravel如何使用Passport实现OAuth2?(完整配置步骤)
Laravel如何生成API文档?(Swagger/OpenAPI教程)
Android利用动画实现背景逐渐变暗
Laravel Session怎么存储_Laravel Session驱动配置详解
如何在IIS中新建站点并配置端口与物理路径?
今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】
制作企业网站建设方案,怎样建设一个公司网站?
使用豆包 AI 辅助进行简单网页 HTML 结构设计
html文件怎么打开证书错误_https协议的html打开提示不安全【指南】
百度浏览器如何管理插件 百度浏览器插件管理方法
高防服务器如何保障网站安全无虞?
深圳网站制作平台,深圳市做网站好的公司有哪些?
Laravel安装步骤详细教程_Laravel环境搭建指南
标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析
Laravel如何实现数据库事务?(DB Facade示例)
html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】
Laravel怎么调用外部API_Laravel Http Client客户端使用
Laravel用户密码怎么加密_Laravel Hash门面使用教程
制作电商网页,电商供应链怎么做?
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)


@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
MDC.clear(); // 必须清理!
}
}