1. 【可观测性】Spring Boot 4 OpenTelemetry日志自动注入 TraceId1.1. 概述本文通过极简示例项目演示Spring Boot 4 接入 OpenTelemetry无需手动存储 TraceId、手动获取 TraceId即可在日志中自动带上分布式链路追踪 ID实现同一请求内日志串联。1.2. 背景与目标在微服务排查问题时最常用的手段就是通过traceId串联一次请求全链路日志。Spring Boot 4 内置的spring-boot-starter-opentelemetry开箱即用日志模板会自动带上 traceId、spanId。本示例目标同一个 HTTP 请求Controller、Service 日志的 traceId 保持一致不同 HTTP 请求traceId 自动生成不同值零自定义 存储和获取 TraceId 代码OpenTelemetry 依赖自动完成上下文传递。1.3. 环境信息Spring Boot4.1.2JDK21组件Spring Boot OpenTelemetry Starter、Spring Web MVC、Lombok1.4. 创建项目通过 Spring Initializr 创建项目项目名hello-opentelemetry-traceid1.5. 核心依赖引入 Spring Boot 官方封装的 OpenTelemetry Starter 。dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-opentelemetry/artifactId/dependency1.6. 业务代码编写1.6.1. HelloControllerpackagecom.example.hello_opentelemetry_traceid.hello;importlombok.RequiredArgsConstructor;importlombok.extern.slf4j.Slf4j;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RestController;Slf4jRestControllerRequiredArgsConstructorpublicclassHelloController{privatefinalHelloServicehelloService;GetMapping(/hello)publicStringhello(){log.info(HelloController.hello());returnhelloService.hello();}}1.6.2. HelloServicepackagecom.example.hello_opentelemetry_traceid.hello;importlombok.extern.slf4j.Slf4j;importorg.springframework.stereotype.Service;Slf4jServicepublicclassHelloService{publicStringhello(){log.info(HelloService.hello());returnHello World;}}✨ 重点代码里没有任何一行手动存储或获取 TraceId 的代码。1.7. 验证效果启动项目多次访问接口http://localhost:8080/hello1.7.1. 预期特征✅ 同一次请求Controller 和 Service 日志traceId完全相同✅ 不同请求自动生成全新traceId✅ traceId / spanId 自动输出在日志方括号内1.7.2. 日志样例2026-10-31T23:42:31.65308:00 INFO10124---[hello-opentelemetry-traceid][nio-8080-exec-1][f799ce83c38bd74f624968cccd5fa140-f0c2b359154d5137]c.e.h.hello.HelloController:HelloController.hello()2026-10-31T23:42:31.65408:00 INFO10124---[hello-opentelemetry-traceid][nio-8080-exec-1][f799ce83c38bd74f624968cccd5fa140-f0c2b359154d5137]c.e.h.hello.HelloService:HelloService.hello()2026-10-31T23:42:46.97408:00 INFO10124---[hello-opentelemetry-traceid][nio-8080-exec-2][a81820c0bfba4c9a8e9ebf3bbc97cf18-0840629a10e3ba3a]c.e.h.hello.HelloController:HelloController.hello()2026-10-31T23:42:46.97408:00 INFO10124---[hello-opentelemetry-traceid][nio-8080-exec-2][a81820c0bfba4c9a8e9ebf3bbc97cf18-0840629a10e3ba3a]c.e.h.hello.HelloService:HelloService.hello()格式说明[traceId-spanId]前者是链路 ID后者是当前片段 ID。同一请求内Controller 与 Service 的 traceId 完全一致。两次不同请求的 traceId 则各不相同。至此可以确认OpenTelemetry 会自动将链路上下文注入日志的上下文存储中链路与日志的关联已经生效。2. 完整工程代码本章节为独立的完整代码汇总可直接复制搭建工程与上文分步讲解逻辑分离。2.1. POM?xml version1.0 encodingUTF-8?projectxmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion4.1.2/versionrelativePath//parentgroupIdcom.example/groupIdartifactIdhello-opentelemetry-traceid/artifactIdversion0.0.1-SNAPSHOT/versionpropertiesjava.version21/java.version/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-opentelemetry/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-webmvc/artifactId/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-opentelemetry-test/artifactIdscopetest/scope/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-webmvc-test/artifactIdscopetest/scope/dependency/dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/pluginplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdexecutionsexecutioniddefault-compile/idphasecompile/phasegoalsgoalcompile/goal/goalsconfigurationannotationProcessorPathspathgroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/path/annotationProcessorPaths/configuration/executionexecutioniddefault-testCompile/idphasetest-compile/phasegoalsgoaltestCompile/goal/goalsconfigurationannotationProcessorPathspathgroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/path/annotationProcessorPaths/configuration/execution/executions/plugin/plugins/build/project2.2. application.ymlspring:application:name:hello-opentelemetry-traceid2.3. HelloOpentelemetryTraceidApplicationpackagecom.example.hello_opentelemetry_traceid;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplicationpublicclassHelloOpentelemetryTraceidApplication{publicstaticvoidmain(String[]args){SpringApplication.run(HelloOpentelemetryTraceidApplication.class,args);}}2.4. HelloControllerpackagecom.example.hello_opentelemetry_traceid.hello;importlombok.RequiredArgsConstructor;importlombok.extern.slf4j.Slf4j;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RestController;Slf4jRestControllerRequiredArgsConstructorpublicclassHelloController{privatefinalHelloServicehelloService;GetMapping(/hello)publicStringhello(){log.info(HelloController.hello());returnhelloService.hello();}}2.5. HelloServicepackagecom.example.hello_opentelemetry_traceid.hello;importlombok.extern.slf4j.Slf4j;importorg.springframework.stereotype.Service;Slf4jServicepublicclassHelloService{publicStringhello(){log.info(HelloService.hello());returnHello World;}}3. 附录完整启动日志.____ _ __ _ _ /\\/ ____ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | _|_| | _\/ _|\\\\\\/ ___)||_)|||||||(_||)))) |____| .__|_| |_|_| |_\__, | / / / / |_||___//_/_/_/ :: Spring Boot :: (v4.1.2) 2026-10-31T23:42:00.16108:00 INFO 10124 --- [hello-opentelemetry-traceid] [ main] [ ] e.h.HelloOpentelemetryTraceidApplication : Starting HelloOpentelemetryTraceidApplication using Java 21.0.1 with PID 10124 (E:\hello-world\hello-opentelemetry-traceid\target\classes started by SongGuanxun in E:\hello-world\hello-opentelemetry-traceid) 2026-10-31T23:42:00.17508:00 INFO 10124 --- [hello-opentelemetry-traceid] [ main] [ ] e.h.HelloOpentelemetryTraceidApplication : No active profile set, falling back to 1 default profile: default 2026-10-31T23:42:02.67308:00 INFO 10124 --- [hello-opentelemetry-traceid] [ main] [ ] o.s.boot.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http) 2026-10-31T23:42:02.71108:00 INFO 10124 --- [hello-opentelemetry-traceid] [ main] [ ] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2026-10-31T23:42:02.71208:00 INFO 10124 --- [hello-opentelemetry-traceid] [ main] [ ] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/11.0.27] 2026-10-31T23:42:02.83408:00 INFO 10124 --- [hello-opentelemetry-traceid] [ main] [ ] b.w.c.s.WebApplicationContextInitializer : Root WebApplicationContext: initialization completed in 2471 ms 2026-10-31T23:42:03.53908:00 INFO 10124 --- [hello-opentelemetry-traceid] [ main] [ ] i.m.c.instrument.push.PushMeterRegistry : Publishing metrics for OtlpMeterRegistry every 1m to http://localhost:4318/v1/metrics with resource attributes {service.namehello-opentelemetry-traceid} 2026-10-31T23:42:04.43608:00 INFO 10124 --- [hello-opentelemetry-traceid] [ main] [ ] o.s.boot.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path / 2026-10-31T23:42:04.44908:00 INFO 10124 --- [hello-opentelemetry-traceid] [ main] [ ] e.h.HelloOpentelemetryTraceidApplication : Started HelloOpentelemetryTraceidApplication in 5.798 seconds (process running for 7.846) 2026-10-31T23:42:31.47508:00 INFO 10124 --- [hello-opentelemetry-traceid] [nio-8080-exec-1] [ ] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet dispatcherServlet 2026-10-31T23:42:31.47608:00 INFO 10124 --- [hello-opentelemetry-traceid] [nio-8080-exec-1] [ ] o.s.web.servlet.DispatcherServlet : Initializing Servlet dispatcherServlet2026-10-31T23:42:31.47908:00 INFO10124---[hello-opentelemetry-traceid][nio-8080-exec-1][]o.s.web.servlet.DispatcherServlet:Completed initializationin3ms2026-10-31T23:42:31.65308:00 INFO10124---[hello-opentelemetry-traceid][nio-8080-exec-1][f799ce83c38bd74f624968cccd5fa140-f0c2b359154d5137]c.e.h.hello.HelloController:HelloController.hello()2026-10-31T23:42:31.65408:00 INFO10124---[hello-opentelemetry-traceid][nio-8080-exec-1][f799ce83c38bd74f624968cccd5fa140-f0c2b359154d5137]c.e.h.hello.HelloService:HelloService.hello()2026-10-31T23:42:46.97408:00 INFO10124---[hello-opentelemetry-traceid][nio-8080-exec-2][a81820c0bfba4c9a8e9ebf3bbc97cf18-0840629a10e3ba3a]c.e.h.hello.HelloController:HelloController.hello()2026-10-31T23:42:46.97408:00 INFO10124---[hello-opentelemetry-traceid][nio-8080-exec-2][a81820c0bfba4c9a8e9ebf3bbc97cf18-0840629a10e3ba3a]c.e.h.hello.HelloService:HelloService.hello()
企业数字化 ERP 产品动态
相关推荐
VMD参数K与alpha优化:WOA包络熵调参实战 简介:这份资源面向计算机、电子信息工程、数学等专业学生及信号处理学习者,围绕Matlab环境下WOA-VMD鲸鱼算法优化变分模态分解展开,重点解决VMD中模态数k与惩罚因子alpha依赖经验选取、分解效果不稳定的问题。资源包共1个文件,为6… · 2026/11/2 19:07:33
OpenCV+Qt细胞计数工具:连通域统计与分水岭拆粘连 简介:面向生物医学图像分析与计算机视觉入门者的OpenCV细胞计数项目源码包,围绕细胞图像自动识别与数量统计展开,适合希望将图像处理算法与Qt图形界面结合实践的学习者。压缩包共41个文件、约7.6MB,包含C源码与头文件、Qt界面文件… · 2026/11/2 19:07:33
知网AI率超标怎么降?4个去AI写作痕迹技巧+免费降AIGC率工具 知网AI率超标怎么降?4个去AI写作痕迹技巧免费降AIGC率工具
知网AI率超标怎么降,这是我这半年被学弟学妹问得最多的一句话。上周一个学管理的本科生发来截图:一篇1.2万字的毕业论文,知网AIGC检测报告上AI特征值过半,学… · 2026/11/2 19:06:30
Excel计量修约漏洞:用SWL函数实现国标GB/T 8170四舍六入逢五奇进偶舍 简介:本资源是一份面向计量、质检及数据分析领域从业者的Excel高级数值处理技术文档,专门解决Excel原生函数无法实现“四舍六入、逢五奇进偶舍”(GB 8170—87修约规则)的实务难题。文档完整提供自定义VBA函数SWL(x, y)的原理说明、… · 2026/11/3 10:55:25
WebSphere MQ 核心原理:WAL日志与双状态机如何保障消息不丢 简介:本资源是一份面向中间件初学者与企业级Java/.NET开发者的IBM WebSphere MQ系统性入门教程,聚焦消息队列核心原理与生产环境落地能力培养。PDF文档共217页,结构清晰、内容扎实,完整覆盖中间件概念优势、WebSphere MQ的生产者-… · 2026/11/3 10:55:25
Hough-Contour瞳孔检测:精度99.8%、320×240单帧60ms 简介:围绕红外视频中的瞳孔精确检测,这份PDF文献提出Hough-Contour算法,将改进的Hough梯度法与轮廓匹配相结合,面向图像处理、计算机视觉方向的研究人员和工程师,也可供心理健康研究、犯罪侦查、医疗诊断等需要高精度瞳… · 2026/11/3 10:55:25
COMSOL一维瞬态导热:从建模到erfc解析解验证 简介:这份文档围绕 COMSOL 求解一维热传导方程展开,面向已具备 PDE 与传热基础、希望用多物理场软件完成仿真闭环的工程人员与学习者。内容以固体传热物理场和瞬态研究为主线,依次说明几何区间 0 到 14 的建立、导热系数/密度/恒压热容取 1 的… · 2026/11/3 10:55:25
SpringBoot整合TrueLicense:内网离线授权与硬件指纹校验 简介:《SpringBoot 整合 TrueLicense 实现 License 的授权与服务器许可》是一份面向 Java 后端开发者与架构师的实战型 PDF 文档,围绕客户内网部署场景下的软件授权、服务器许可校验与离线许可分发展开,适合需要保护知识产权、限制应用运行环… · 2026/11/3 10:55:25
Qt5.1.1与MinGW 4.8环境搭建:从安装到Hello World的完整指南 简介:《C Qt5 范例开发大全》中文版面向希望系统掌握 Qt5 框架的 C 开发者,从零基础入门到有经验的程序员均可对照实践。内容以实例驱动,覆盖开发环境搭建与 Hello World 起步、窗体基类与窗口大小位置背景色控制、无边框窗体移动及多窗体调用… · 2026/11/3 10:54:24
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46