千家信息网

如何使用SpringBoot+Logback实现链路追踪功能

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,小编给大家分享一下如何使用SpringBoot+Logback实现链路追踪功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧
千家信息网最后更新 2026年11月01日如何使用SpringBoot+Logback实现链路追踪功能

小编给大家分享一下如何使用SpringBoot+Logback实现链路追踪功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

一、实现原理

Spring Boot默认使用LogBack日志系统,并且已经引入了相关的jar包,所以我们无需任何配置便可以使用LogBack打印日志。

MDC(Mapped Diagnostic Context,映射调试上下文)是log4j和logback提供的一种方便在多线程条件下记录日志的功能。

实现思路是在一个请求开始时,将请求相关的上下文信息(例如客户ID、客户的IP地址、sessionId、请求参数等)添加到MDC,然后配置好logback-spring.xml,则Logback组件将会在每条日志中打印出存放到MDC的信息,从而实现一个ID贯穿用户的所有操作。

二、代码实战

新建一个spring boot项目spring-boot-log,按照下面步骤操作。

新建日志拦截器

日志拦截器在请求开始获取用户的sessionId,当然也可以生成一个UUID,生成后存放到MDC中。

SessionInterceptor代码如下:

/** * 日志拦截器 * @Author: Java碎碎念 * */public class SessionInterceptor extends HandlerInterceptorAdapter { /** * 会话ID */ private final static String SESSION_KEY = "sessionId"; @Override public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception { } @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// String token = UUID.randomUUID().toString().replaceAll("-",""); //本例测试使用sessionId,也可以使用UUID等 String token = request.getSession().getId(); MDC.put(SESSION_KEY, token); return true; } @Override public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception { // 删除 MDC.remove(SESSION_KEY); }}

新建配置类

新建InterceptorConfig,注册刚才的日志拦截器。

InterceptorConfig代码如下:

@Configurationpublic class InterceptorConfig implements WebMvcConfigurer { @Bean public SessionInterceptor getSessionInterceptor() { return new SessionInterceptor(); } @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(getSessionInterceptor()).addPathPatterns("/*"); }}

修改logback-spring.xml

配置logback-spring.xml,获取日志拦截器添加的sessionId并打印到日志中,配置文件中获取方式如下:

%X{sessionId}

本例中打印sessionId到控制台和文件,完整配置如下:

%date [%thread] [%X{sessionId}] %-5level %logger{80} - %msg%n ${log.base}.log ${log.base}.%d{yyyy -MM-dd}.log.zip %date [%thread] [%X{sessionId}] %-5level %logger{80} - %msg%n

添加controller

新建TestLogController,打印日志。

代码如下:

@RestControllerpublic class TestLogController { Logger log = LoggerFactory.getLogger(getClass()); /** * 测试登录 */ @RequestMapping(value = "/testLogin") public String testLogin() { log.info("用户登录成功!"); return "ok"; } /** * 测试下单 */ @RequestMapping(value = "/testNewOrder") public String testNewOrder() { log.info("用户创建了订单!"); log.info("请求完成,返回ok!"); return "ok"; } /** * 测试购买 */ @RequestMapping(value = "/testPay") public String testPay() { log.info("用户付款!"); return "ok"; }}

三、测试

打开浏览器连续访问接口testLogin、testNewOrder和testPay,模拟用户登录、下单、付款操作,控制台和文件中打印的日志中已经包含了sessonId信息,打印的结果如下:

[http-nio-8888-exec-1] [CB8E7DB250A31F2BE6C05B30633B9A95] INFO com.example.springbootlog.controller.TestLogController - 用户登录成功![http-nio-8888-exec-2] [CB8E7DB250A31F2BE6C05B30633B9A95] INFO com.example.springbootlog.controller.TestLogController - 用户创建了订单![http-nio-8888-exec-2] [CB8E7DB250A31F2BE6C05B30633B9A95] INFO com.example.springbootlog.controller.TestLogController - 请求完成,返回ok![http-nio-8888-exec-3] [CB8E7DB250A31F2BE6C05B30633B9A95] INFO com.example.springbootlog.controller.TestLogController - 用户付款!

以上是"如何使用SpringBoot+Logback实现链路追踪功能"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

日志 用户 配置 拦截器 测试 代码 登录 功能 信息 文件 篇文章 链路 成功 上下 上下文 内容 客户 控制台 订单 控制 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技产业 科技和互联网公司 科技企业和互联网企业 互联网与科技金融数据 腾讯阿里互联网科技 港股互联网科技股 互联网科技上市公司 互联网科技logo设计 互联网科技英文翻译 重庆科技学院互联网 互联网科技生活的内容 随着互联网科技发展 哈尔滨屹滨互联网科技有限公司 银川新华互联网科技学校联系电话 民营互联网公司国防科技 上海钢联属于互联网科技股吗 广州百诚互联网科技有限公司官网 陕西彩京云互联网科技有限公司 广东猫王互联网科技有限公司电话 互联网科技快速发展优美句子 云信互联网科技有限公司 狮子座互联网科技 天扬科技互联网广告 深圳前海聚择互联网科技有限公司 昭通云南众福互联网科技有限公司 世界互联网科技公司市值排名 河南住房之家互联网科技 迪庆互联网科技招生 怎样加入科技互联网 卡尔迅互联网科技有限公司
0