Spring Boot 如何启用分布式跟踪并让日志输出关联的 Correlation ID?

发布时间:2026/9/9 19:10:13

Spring Boot 如何启用分布式跟踪并让日志输出关联的 Correlation ID? Spring Boot 如何启用分布式跟踪并让日志输出关联的 Correlation ID【免费下载链接】spring-bootSpring Boot helps you to create Spring-powered, production-grade applications and services with absolute minimum fuss.项目地址: https://gitcode.com/gh_mirrors/sp/spring-boot如果你的 Spring Boot 应用需要把 HTTP 请求上报为分布式追踪trace并希望每行日志都带有可以和追踪关联的 Correlation ID本文给出官方文档中的完整操作路径添加追踪 starter 依赖、配置采样率、启动追踪后端、在 Zipkin UI 中确认 trace以及理解/定制 Correlation ID 的日志格式。主路径使用 OpenZipkin Brave Zipkin 组合这是 Spring Boot 文档示例采用的组合OpenTelemetry OTLP 组合作为可选分支简要说明。先准备一个带日志输出的示例应用追踪效果依赖日志中的 Correlation ID所以示例应用要在处理请求时打一条日志。文档中的示例代码如下源文件见 MyApplication.javaimport org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; RestController SpringBootApplication public class MyApplication { private static final Log logger LogFactory.getLog(MyApplication.class); RequestMapping(/) String home() { logger.info(home() has been called); return Hello World!; } public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } }关键点home()方法里的logger.info(...)语句就是后面用来观察 Correlation ID 的日志来源不要省略。添加追踪依赖并配置采样Spring Boot Actuator 为 Micrometer Tracing 提供了依赖管理和自动配置并内置以下 tracer 的自动配置OpenTelemetry通过 OTLP 上报starter 为org.springframework.boot:spring-boot-starter-opentelemetryOpenZipkin Brave上报到 Zipkinstarter 为org.springframework.boot:spring-boot-starter-zipkin。主路径选用 Brave Zipkin在构建文件中添加dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-zipkin/artifactId /dependency然后添加以下application.yml配置management: tracing: sampling: probability: 1.0原因Spring Boot 默认只采样 10% 的请求以避免压垮追踪后端。把management.tracing.sampling.probability设为1.0后每个请求都会发送到追踪后端。如果你只需要部分请求上报可以调低这个值但要留意被采样丢弃的请求不会出现在后端里。可选分支如果选用 OpenTelemetry则改用org.springframework.boot:spring-boot-starter-opentelemetry依赖用management.opentelemetry.tracing.export.otlp.*系列属性配置 OTLP 上报并可以通过management.opentelemetry.tracing.sampler选择采样器默认值为parent-based-trace-id-ratio即按management.tracing.sampling.probability的比例采样。启动追踪后端并验证 traceCorrelation ID 之外要看到完整的 trace 还需要一个运行中的追踪后端。文档以 Zipkin 为例按 Zipkin Quickstart guide 的说明在本地启动一个 Zipkin 实例文档中 UI 地址为http://localhost:9411。Zipkin 启动后再启动你的应用然后做两步验证用浏览器打开http://localhost:8080看到输出Hello World!文档示例输出。这一步同时触发了一次 HTTP 请求的 observation它会被桥接到 Brave 并上报一条新 trace 到 Zipkin。打开 Zipkin UIhttp://localhost:9411点击 Run Query 列出所有已收集的 trace应该能看到一条 trace点击 Show 可以查看这条 trace 的细节见 tracing.adoc 的 Getting Started 一节。让日志输出关联的 Correlation ID启用 Micrometer Tracing 后Spring Boot 默认就会把 Correlation ID 写进日志把日志行与 span/trace 关联起来这一步不需要额外代码。默认格式的构成默认 Correlation ID 由traceId和spanId两个 MDC 值组成形如[traceId-spanId]。例如文档中的示例MDCtraceId为803B448A0489F84084905D3093480352、spanId为3425F23BB2432450时日志输出会包含 Correlation ID[803B448A0489F84084905D3093480352-3425F23BB2432450]这是文档给出的示例值实际运行中 ID 会不同。默认的 Correlation ID 格式会跟随 MDC 键名并自动把键名填充到 32 和 16 个字符因此无需额外配置就能继续工作。两个需要注意的边界Brave 的 baggage 影响 MDC 键名使用 Brave 时MDC 键名只在 baggage 开启时生效。把management.tracing.baggage.enabled设为false会阻止 Brave 把 trace/span ID 写入 MDC从而直接禁用日志关联。如果你依赖日志里的 Correlation ID不要关闭 baggage。自定义 MDC 键名可以用management.tracing.mdc.trace-id-key和management.tracing.mdc.span-id-key两个属性自定义traceId/spanId的 MDC 键名默认 Correlation ID 格式会自动跟随新键名。如果你想要别的格式例如 Spring Cloud Sleuth 曾经使用的格式用logging.pattern.correlation属性自定义。注意自己设置的值会优先于从 MDC 键名推导的格式所以它必须自行引用你自定义过的键名。文档给出的 Logback 示例logging: pattern: correlation: [${spring.application.name:},%X{traceId:-},%X{spanId:-}] include-application-name: false两点说明logging.pattern.correlation值末尾的空格用于把它和紧随其后的 logger 名称隔开logging.include-application-name设为false是为了避免应用名在日志里重复出现因为上面的 correlation 格式里已经包含了${spring.application.name}。Correlation ID 依赖上下文传播context propagation。如果你的应用跨线程或使用响应式管线见 observability.adoc 的 Context Propagation 一节默认情况下ThreadLocal值不会自动在响应式算子间恢复可以通过spring.reactor.context-propagation设为auto启用自动传播使用自动配置的AsyncTaskExecutor处理Async方法时需要用spring.task.execution.propagate-context显式开启上下文传播。跨服务调用时传播 trace要让 trace 在网络上自动传播即下游服务收到请求时延续同一个 trace客户端必须用自动配置的构造器创建注入自动配置的RestClient.Builder来构造RestClient注入自动配置的WebClient.Builder来构造WebClient。文档明确警告如果不用自动配置的 builder 而直接创建RestClient或WebClient自动的 trace 传播不会生效。限制与测试场景说明采样默认 10% 采样率验证阶段建议先设为1.0确认行为后再按需调低。使用SpringBootTest时会上报数据的追踪组件不会被自动配置测试中的追踪行为与生产运行不同见 testing/spring-boot-applications.adoc 的 Tracing 一节。OpenTelemetry 组合下还可以用management.opentelemetry.tracing.limits.*控制每个 span 的属性数、事件数、链接数上限及字符串属性值最大长度。以上配置完成后日志行里的[traceId-spanId]段就是 Correlation ID拿它去 Zipkin UI 的 trace 详情中即可对应到具体的 span。更多细节Baggage、自定义 span 等见 tracing.adoc。【免费下载链接】spring-bootSpring Boot helps you to create Spring-powered, production-grade applications and services with absolute minimum fuss.项目地址: https://gitcode.com/gh_mirrors/sp/spring-boot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/9 19:10:13

AI辅助编程实战:用Claude与Godot开发3D星球跑酷游戏

这次我们来看一个可以直接抄作业的实战项目:用 Claude Fable 5.1 作为 AI 辅助编程层,配合 Ziva 插件和 Godot 引擎,从零做出一款 3D 星球跑酷游戏。先说结论:这套方案不是拿 AI 拼一个“看起来能跑”的 Demo,而是把完…

2026/9/9 19:10:13

AI时代程序员四大突围路线:从写代码到用AI创造价值

最近一年,被问得最多的问题就是“AI来了,程序员是不是要凉了”。我身边的圈子也天天在吵:有人用AI写代码写得飞起,一天干完三天的活;有人看着IDEA里的红波浪线,越看越焦虑。说实话,作为一个干了…

2026/9/9 20:15:20

后缀树与后缀数组:从原理到应用的字符串算法指南

手头这本《Handbook of Data Structures and Applications》我翻得最多、折角最多的一章,就是关于Suffix Trees和Suffix Arrays的部分。别看后缀树(Suffix Trees)和后缀数组(Suffix Arrays)这俩名字听起来像某个竞赛选…

2026/9/9 20:15:20

AI国风纸雕+东北乡村足球:从提示词到批量出图的实战指南

把AI国风纸雕和东北超足球文化放在一起,听起来像两件不搭边的事。我最近完整跑了一轮:用AI国风纸雕的方式,把东北乡村足球赛的入场、拼抢、庆祝、观众助威这些场景,统一做成多层纸雕风格的系列视觉素材,再转成适合朋友…

2026/9/9 20:15:20

Windows下UDP组播编程实战:VS2022环境搭建与避坑指南

简介:这是一份在Visual Studio环境下用C/Winsock实现UDP组播(多播)通信的演示工程,面向需要进行局域网广播、服务发现或实时音视频传输的Windows网络开发者。工程由发送端与接收端两套项目组成,代码覆盖套接字创建、绑…

2026/9/9 20:15:20

Axolot DOCXSuit:Delphi纯代码生成和读写DOCX的实战指南

简介:Axolot DOCXSuit 是一套面向 Delphi XE10.3 Rio 开发者的 DOCX 文档处理组件集,包含 AXWWriter、AXWReports 与 DOCXReadWrite 三部分,分别覆盖 Word 文档动态生成、可视化报表设计以及现有文档读写与批量修改等场景。借助这套工具&…

2026/9/9 20:15:20

C#通过ModbusTCP与西门子S7-1200 PLC通讯核心实践

简介:面向工业自动化领域的C#开发人员,这份资源以西门子1200 PLC为对象,系统讲解并实现了基于ModbusTcp协议的数据通信方案。内容从Modbus协议的功能码机制讲起,涵盖读线圈、读离散输入、读保持寄存器、写单个/多个线圈及写寄存器…

2026/9/9 20:10:20

基于西门子S7-200 PLC的道口护栏自动控制系统设计与实践

道口护栏自动控制系统,用西门子S7-200 PLC来做这件事,乍一听像是课程设计或者老掉牙的自动化改造,但真在工业现场把这个系统从硬件选型、IO分配、梯形图逻辑到调试落地全走一遍,你会发现里头的讲究远比“接几根线、写一段正反转程…

2026/9/9 13:11:35

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/8 7:15:15

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/9 0:00:48

MHS模型硬件标准:让大模型像调用软件一样控制物理设备

让Claude真正看着显微镜说“这个细胞形态不太对”,或者让大模型自己调一版机械臂的运动轨迹,这事儿听上去已经很接近科幻片了。但你真上手试一次就会发现,模型不缺智商,缺的是一个能插进显微镜、机械臂、激光控制器里的“通用插座…

2026/9/9 0:00:48

AI五大核心方向详解:从机器学习到大模型,零基础转行选哪条?

会有人告诉我,他想转行学AI,但打开招聘网站一看直接傻眼:机器学习、深度学习、自然语言处理、计算机视觉、大模型应用……满屏都是这些词,好像每个都会一点,又好像每个都离自己很远。还有人上来就问“学Python还是学Ja…

2026/9/9 0:00:49

从50行最小循环到生产级AI引擎:工程化改造全解析

直接说干货。这一章我写的不是那种"hello world跑通某个模型"的教程,而是把AI引擎当做一个真正要上线、要被人调用、要扛流量的系统来聊。从最初只有50行的最小循环,到能够承载生产流量的AI引擎,中间差的不是代码量,而是…

2026/9/7 16:23:03

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/7 22:46:00

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/9 10:21:54

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码