最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot+slf4j實現(xiàn)全鏈路調(diào)用日志跟蹤的方法(一)

 更新時間:2021年05月13日 09:26:19   作者:kevin_ying  
本文重點給大家介紹Tracer集成的slf4j MDC功能,方便用戶在只簡單修改日志配置文件的前提下輸出當前 Tracer 上下文 TraceId,文章通過代碼給大家講解了在springboot中使用的技巧,感興趣的朋友跟隨小編一起看看吧

SpringBoot中除了常見的分布式鏈路跟蹤系統(tǒng)zipkin、skywalking等,如果需要快速定位一次請求的所有日志,那么該如何實現(xiàn)?實際slf4j提供了MDC(Mapped Diagnostic Contexts)功能,支持用戶定義和修改日志的輸出格式以及內(nèi)容。本文將介紹 Tracer集成的slf4j MDC功能,方便用戶在只簡單修改日志配置文件的前提下輸出當前 Tracer 上下文 TraceId。

MDC介紹

MDC(Mapped Diagnostic Context,映射調(diào)試上下文)是 log4j 、logback及l(fā)og4j2 提供的一種方便在多線程條件下記錄日志的功能。MDC 可以看成是一個與當前線程綁定的哈希表,可以往其中添加鍵值對。MDC 中包含的內(nèi)容可以被同一線程中執(zhí)行的代碼所訪問。當前線程的子線程會繼承其父線程中的 MDC 的內(nèi)容。當需要記錄日志時,只需要從 MDC 中獲取所需的信息即可。MDC 的內(nèi)容則由程序在適當?shù)臅r候保存進去。對于一個 Web 應(yīng)用來說,通常是在請求被處理的最開始保存這些數(shù)據(jù)。

springboot中如何使用

添加攔截器

public class LogInterceptor implements HandlerInterceptor {

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		String tid = UUID.randomUUID().toString().replace("-", "");
		MDC.put(CloudConstant.MDC_TRACE, tid);
		return true;
	}

	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
			@Nullable Exception ex) throws Exception {
		MDC.remove(CloudConstant.MDC_TRACE);
	}

}

注冊攔截器

@Configuration
public class WebInterceptorAdapter implements WebMvcConfigurer {
	@Bean
	public LogInterceptor logInterceptor() {
		return new LogInterceptor();
	}

	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(logInterceptor());
	}
}

修改日志輸出格式,添加%X{traceId},traceId和MDC中的鍵名稱一致

<pattern>%date %-5level ${PID:- } [%thread] [%X{tid}] : /*[%logger{50}:%line] %msg*/%n</pattern>

添加一個controller調(diào)用測試

@RestController
@RequestMapping("trace")
@Slf4j
public class TestTraceController {

    @GetMapping("traceLog")
    public String traceLog() {
        log.info("---接口調(diào)用了---");
        traceService();
        return "success";
    }

    private void traceService(){
        log.error("## 執(zhí)行traceService方法");
    }
}

日志打印如下,我們可以通過traceId快速查找出同一個請求的所有日志

細心的同學(xué)就會發(fā)現(xiàn),MDC還是存在一些問題

  • 在子線程中打印日志丟失traceId
  • HTTP調(diào)用丟失traceId

下一篇文章中小編繼續(xù)講解子線程中如何實現(xiàn)traceId的日志跟蹤

到此這篇關(guān)于SpringBoot+slf4j實現(xiàn)全鏈路調(diào)用日志跟蹤 一的文章就介紹到這了,更多相關(guān)SpringBoot全鏈路調(diào)用日志跟蹤內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Mybatis優(yōu)化檢索的方法詳解

    Mybatis優(yōu)化檢索的方法詳解

    MyBatis是一款優(yōu)秀的基于Java的持久層框架,它可以將 SQL 語句和數(shù)據(jù)庫中的記錄映射成為 Java 對象,并且支持靈活的 SQL 查詢語句,在Mybatis中,可以使用動態(tài)SQL來靈活構(gòu)造SQL語句,從而滿足各種不同的檢索需求,本文介紹Mybatis如何優(yōu)化檢索,需要的朋友可以參考下
    2024-05-05
  • Springboot+Mybatis-plus不使用SQL語句進行多表添加操作及問題小結(jié)

    Springboot+Mybatis-plus不使用SQL語句進行多表添加操作及問題小結(jié)

    這篇文章主要介紹了在Springboot+Mybatis-plus不使用SQL語句進行多表添加操作,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • 利用Java實現(xiàn)復(fù)制Excel工作表功能

    利用Java實現(xiàn)復(fù)制Excel工作表功能

    這篇文章主要給大家介紹了關(guān)于如何利用Java實現(xiàn)復(fù)制Excel工作表功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Java中圖片轉(zhuǎn)換為Base64的示例及注意事項

    Java中圖片轉(zhuǎn)換為Base64的示例及注意事項

    本文介紹了Base64編碼的概念及其作用,同時列舉了在實現(xiàn)圖片轉(zhuǎn)換為Base64過程中需要注意的問題,包括文件大小、讀取異常、圖片格式、網(wǎng)絡(luò)傳輸效率以及數(shù)據(jù)安全性等,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-10-10
  • java中四種生成和解析XML文檔的方法詳解(介紹+優(yōu)缺點比較+示例)

    java中四種生成和解析XML文檔的方法詳解(介紹+優(yōu)缺點比較+示例)

    本篇文章主要介紹了四種生成和解析XML文檔的方法,即:DOM、SAX、JDOM和DOM4J,具有一定的參考價值,有興趣的可以了解一下。
    2016-11-11
  • Java 如何安全的發(fā)布對象

    Java 如何安全的發(fā)布對象

    這篇文章主要介紹了Java 如何安全的發(fā)布對象,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2021-01-01
  • java9遷移注意問題總結(jié)

    java9遷移注意問題總結(jié)

    本篇文章給大家詳細整理了java9遷移注意的問題,希望我們整理的內(nèi)容能夠幫助到大家。
    2018-02-02
  • 使用JPA+querydsl如何實現(xiàn)多條件動態(tài)查詢

    使用JPA+querydsl如何實現(xiàn)多條件動態(tài)查詢

    這篇文章主要介紹了使用JPA+querydsl如何實現(xiàn)多條件動態(tài)查詢,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 詳解Java的MyBatis框架中SQL語句映射部分的編寫

    詳解Java的MyBatis框架中SQL語句映射部分的編寫

    這篇文章主要介紹了Java的MyBatis框架中SQL語句映射部分的編寫,文中分為resultMap和增刪查改實現(xiàn)兩個部分來講解,需要的朋友可以參考下
    2016-04-04
  • SpringBoot集成ENC對配置文件進行加密的流程步驟

    SpringBoot集成ENC對配置文件進行加密的流程步驟

    Spring Boot Encoder,即Spring Boot加密模塊,它提供了一種簡單的方式來集成安全編碼功能到Spring Boot應(yīng)用程序中,它是Spring Security框架的一部分,旨在幫助開發(fā)者輕松地處理數(shù)據(jù)加密,本文給大家介紹了SpringBoot集成ENC對配置文件進行加密的流程步驟
    2024-12-12

最新評論

沽源县| 交城县| 仁寿县| 邓州市| 信宜市| 克拉玛依市| 凤庆县| 林州市| 志丹县| 大丰市| 云南省| 佛教| 江孜县| 汽车| 四子王旗| 老河口市| 多伦县| 大同市| 长沙市| 邛崃市| 米易县| 西华县| 佛山市| 博爱县| 阜南县| 吉木乃县| 章丘市| 巴彦县| 霍林郭勒市| 崇左市| 拉萨市| 耒阳市| 大洼县| 宣威市| 浙江省| 子长县| 宁德市| 彭阳县| 宾川县| 乌拉特后旗| 南投县|