在 Spring Boot 中實現基于 TraceId 的日志鏈路追蹤

1 前言

1.1 什么是 TraceId?

TraceId 是一個唯一的標識符,用于跟蹤分布式系統中的請求。每個請求從客戶端發起到服務端處理,再到可能的多個微服務調用,都會攜帶這個 TraceId,以便在整個請求鏈路中進行追蹤和調試。

1.2 日志鏈路追蹤的意義

日志鏈路追蹤可以幫助開發者:

  • 快速定位問題:通過 TraceId 關聯所有相關日志,快速找到問題的根源。
  • 性能分析:分析請求在各個服務中的耗時,優化性能瓶頸。
  • 監控系統狀態:實時監控系統的運行狀態,確保系統的穩定性和可靠性。

1.3 適用場景

  • 微服務架構:多個服務之間的調用需要追蹤。
  • 分布式系統:跨多個節點的請求需要追蹤。
  • 復雜業務流程:需要追蹤請求在各個步驟中的處理情況。

2 環境準備

2.1 Spring Boot 版本要求

本文基于 Spring Boot 2.7.x 版本進行編寫,其他版本可能需要調整依賴和配置。

2.2 引入依賴(Sleuth 或 MDC)

2.2.1 使用 Sleuth

Sleuth 是 Spring Cloud Sleuth 的一部分,可以自動為每個請求生成 TraceIdSpanId,并將其注入到日志中。

pom.xml 中添加以下依賴:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>

2.2.2 使用 MDC

MDC(Mapped Diagnostic Context)是 Logback 提供的一個工具,可以將上下文信息(如 TraceId)綁定到當前線程,方便在日志中輸出。

pom.xml 中添加以下依賴:

<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId>
</dependency>
<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId>
</dependency>

2.3 配置日志格式

2.3.1 使用 Sleuth

Sleuth 默認會將 TraceIdSpanId 注入到日志中,無需額外配置。

2.3.2 使用 MDC

logback-spring.xml 中配置日志格式,添加 %X{traceId} 以輸出 TraceId

<configuration><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - [%X{traceId}] %msg%n</pattern></encoder></appender><root level="info"><appender-ref ref="STDOUT" /></root>
</configuration>

3 實現步驟

3.1 自動生成 TraceId

3.1.1 使用 Sleuth 自動生成 TraceId

Sleuth 會自動為每個請求生成 TraceIdSpanId,無需額外代碼。

3.1.2 自定義 TraceId 生成邏輯

如果需要自定義 TraceId 生成邏輯,可以實現 TraceIdProvider 接口:

import org.springframework.cloud.sleuth.Tracer;
import org.springframework.cloud.sleuth.Tracer.TraceIdProvider;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.util.UUID;@Configuration
public class TraceIdConfig {@Beanpublic TraceIdProvider traceIdProvider() {return new TraceIdProvider() {@Overridepublic String nextTraceId() {return UUID

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/71952.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/71952.shtml
英文地址,請注明出處:http://en.pswp.cn/web/71952.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

游戲引擎學習第150天

回顧與當天計劃 我們在這里完全不使用任何庫&#xff0c;所以我們完全是引擎和庫免疫的, 正如大家所知道的&#xff0c;我們正在編寫自己的資源處理系統&#xff0c;準確來說&#xff0c;是一個資源加載系統。過去一周我們已經完成了很多工作&#xff0c;現在只剩下最后幾步&a…

Flutter中stream學習

Flutter中stream學習 概述Stream的基礎概念stream的常用方法Stream.fromFuture(Future<T> future)Stream.fromFutures(Iterable<Future<T>> futures)Stream.fromIterable(Iterable<T> elements)Stream.periodic(Duration period, [T computation(int c…

基于javaweb的SSM房屋租賃管理系統設計和實現(源碼+文檔+部署講解)

技術范圍&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、小程序、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容&#xff1a;免費功能設計、開題報告、任務書、中期檢查PPT、系統功能實現、代碼編寫、論文編寫和輔導、論…

物聯網商業模式

物聯網商業模式是一種戰略規劃&#xff0c;它融合了物聯網技術來創造價值并獲取收入。它與傳統商業模式的不同之處在于&#xff0c;它利用互聯設備來改善運營、提升客戶體驗以及優化服務項目。在當今由科技驅動的世界中&#xff0c;這種商業模式通過利用實時數據來提供創新服務…

從0開始的操作系統手搓教程45——實現exec

目錄 建立抽象 實現加載 實現sys_execv &#xff01;&#xff01;&#xff01;提示&#xff1a;因為實現問題沒有測試。所以更像是筆記&#xff01; exec 函數的作用是用新的可執行文件替換當前進程的程序體。具體來說&#xff0c;exec 會將當前正在運行的用戶進程的進程體&…

【python爬蟲】酷狗音樂爬取練習

注意&#xff1a;本次爬取的音樂僅有1分鐘試聽&#xff0c;僅作學習爬蟲的原理&#xff0c;完整音樂需要自行下載客戶端。 一、 初步分析 登陸酷狗音樂后隨機選取一首歌&#xff0c;在請求里發現一段mp3文件&#xff0c;復制網址&#xff0c;確實是我們需要的url。 復制音頻的…

Linux開發工具----vim

目錄 Linux編輯器-vim使用 1. vim的基本概念 正常/普通/命令模式(Normal mode) 插入模式(Insert mode) 底行模式(last line mode) 2. vim的基本操作 3. vim正常模式命令集 4. vim底行模式命令集 5. vim操作總結 (本篇文章相當于vim常用命令字典) Linux編輯器-vim使用 我們先來看…

基于云函數的自習室預約微信小程序+LW示例參考

全階段全種類學習資源&#xff0c;內涵少兒、小學、初中、高中、大學、專升本、考研、四六級、建造師、法考、網賺技巧、畢業設計等&#xff0c;持續更新~ 文章目錄 [TOC](文章目錄) 1.項目介紹2.項目部署3.項目部分截圖4.獲取方式 1.項目介紹 技術棧工具&#xff1a;云數據庫…

卷積神經網絡與計算機視覺:從數學基礎到實戰應用

卷積神經網絡與計算機視覺&#xff1a;從數學基礎到實戰應用 摘要 本文深入解析卷積神經網絡&#xff08;CNN&#xff09;的核心原理及其在計算機視覺中的應用。首先介紹卷積與互相關的數學定義及在神經網絡中的實際應用差異&#xff0c;接著從系統設計視角分析卷積的線性代數…

從Manus到OpenManus:多智能體協作框架如何重構AI生產力?

文章目錄 Manus&#xff1a;封閉生態下的通用AI智能體OpenManus&#xff1a;開源社區的閃速復刻挑戰與未來&#xff1a;框架落地的現實邊界當前局限性未來演進方向 OpenManus使用指南1. 環境配置2. 參數配置3. 替換搜索引擎4. 運行效果 協作框架開啟AI生產力革命 Manus&#xf…

js 使用 Web Workers 來實現一個精確的倒計時,即使ios手機鎖屏或頁面進入后臺,倒計時也不會暫停。

## 效果如上 <!-- 將 main.js 和 worker.js 放在同一個目錄下&#xff0c;然后在 HTML 文件中引入 main.js --><!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content&q…

深入理解 Linux 中的 -h 選項:讓命令輸出更“人性化”

在 Linux 系統中&#xff0c;命令行工具是系統管理員和普通用戶最常用的交互方式之一。然而&#xff0c;命令行輸出往往充滿了技術性術語和數字&#xff0c;對于初學者或非技術用戶來說可能顯得晦澀難懂。幸運的是&#xff0c;許多 Linux 命令都提供了一個非常實用的選項&#…

Docker Compose國內鏡像一鍵部署dify

克隆代碼 git clone https://github.com/langgenius/dify.git進入docker目錄 cd docker修改.env部分 # 將環境模版文件變量重命名 cp .env.example .env # 修改 .env,修改nginx的host和端口,避免端口沖突 NGINX_SERVER_NAME192.168.1.223 NGINX_PORT1880 NGINX_SSL_PORT1443…

紅隊OPSEC(安全運營)個人總結

OPSEC又稱&#xff1a;運營安全&#xff0c;是指在紅隊的視角下&#xff0c;藍隊對我方的威脅。 OPSEC漏洞的五個流程&#xff1a; 關鍵信息識別&#xff1a;指紅隊的關鍵信息不泄露&#xff0c;包括但不限于紅隊的攻擊意圖&#xff0c;能力&#xff0c;人員&#xff0c;活動及…

NO.29十六屆藍橋杯備戰|string九道練習|reverse|翻轉|回文(C++)

P5015 [NOIP 2018 普及組] 標題統計 - 洛谷 #include <bits/stdc.h> using namespace std;int main() {ios::sync_with_stdio(false);cin.tie(nullptr);string s;getline(cin, s);int sz s.size();int cnt 0;for (int i 0; i < sz; i){if (isspace(s[i]))continue…

MongoDB 觸發器實現教程

在傳統的關系型數據庫&#xff08;如 MySQL&#xff09;中&#xff0c;觸發器是一種強大的工具&#xff0c;它可以在特定的數據庫操作&#xff08;如插入、更新或刪除&#xff09;發生時自動執行一段代碼。然而&#xff0c;MongoDB 并沒有原生內置的觸發器概念。不過&#xff0…

C#控制臺應用程序學習——3.11

一、整型數字計算 如果我們想執行以下程序&#xff1a;程序提示用戶輸入一個數字并輸出 num 20 的結果&#xff0c;我們的思維應該是這樣的&#xff1a; using System;public class Class1 {public static void Main(string[] args){Console.WriteLine("Enter the first…

【C語言】指針篇

目錄 C 語言指針概述指針的聲明和初始化聲明指針初始化指針 指針的操作解引用操作指針算術運算 指針的用途動態內存分配作為函數參數 指針與數組數組名作為指針通過指針訪問數組元素指針算術和數組數組作為函數參數指針數組和數組指針指針數組數組指針 函數指針函數指針的定義和…

嵌入式音視頻通話SDK組件EasyRTC:全平臺設備兼容,智能硬件里的WebRTC調用實踐

在萬物互聯時代&#xff0c;智能硬件設備對實時音視頻通信的需求呈現爆發式增長。傳統基于PC或移動端的WebRTC方案難以滿足嵌入式設備在資源占用、低延遲傳輸和硬件適配等方面的特殊需求。本文將深入探討如何通過EasyRTC嵌入式音視頻通信SDK在嵌入式設備中實現高效的WebRTC視頻…

Aim Robotics電動膠槍:機器人涂膠點膠的高效解決方案

在自動化和智能制造領域&#xff0c;機器人技術的應用越來越廣泛&#xff0c;而涂膠和點膠作為生產過程中的重要環節&#xff0c;也逐漸實現了自動化和智能化。Aim Robotics作為一家專注于機器人技術的公司&#xff0c;其推出的電動膠槍為這一領域帶來了高效、靈活且易于操作的…