欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間: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)功能,支持用戶定義和修改日志的輸出格式以及內容。本文將介紹 Tracer集成的slf4j MDC功能,方便用戶在只簡單修改日志配置文件的前提下輸出當前 Tracer 上下文 TraceId。

MDC介紹

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

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

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

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

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

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

  • 在子線程中打印日志丟失traceId
  • HTTP調用丟失traceId

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

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

相關文章

  • 微信公眾號開發(fā)之回復圖文消息java代碼

    微信公眾號開發(fā)之回復圖文消息java代碼

    這篇文章主要為大家詳細介紹了微信公眾號開發(fā)之回復圖文消息java代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • 在springboot中添加mvc功能的正確姿勢講解

    在springboot中添加mvc功能的正確姿勢講解

    這篇文章主要介紹了在springboot中添加mvc功能的正確姿勢,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • JAVA拋出異常的三種形式詳解

    JAVA拋出異常的三種形式詳解

    這篇文章主要介紹了JAVA拋出異常的三種形式詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • JAVA利用泛型返回類型不同的對象方法

    JAVA利用泛型返回類型不同的對象方法

    下面小編就為大家?guī)硪黄狫AVA利用泛型返回類型不同的對象方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • java調用webservice接口,并解析返回參數(shù)問題

    java調用webservice接口,并解析返回參數(shù)問題

    這篇文章主要介紹了java調用webservice接口,并解析返回參數(shù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 關于Java的動態(tài)代理機制

    關于Java的動態(tài)代理機制

    這篇文章主要介紹了關于Java的動態(tài)代理機制,動態(tài)代理就是,在程序運行期,創(chuàng)建目標對象的代理對象,并對目標對象中的方法進行功能性增強的一種技術,需要的朋友可以參考下
    2023-05-05
  • SpringBoot整合Caffeine使用示例

    SpringBoot整合Caffeine使用示例

    Spring Boot 和 Caffeine 可以很容易地進行整合,Caffeine 是一個現(xiàn)代化的 Java 緩存庫,提供了高性能和靈活的緩存策略,本文給大家介紹了SpringBoot整合Caffeine使用示例,需要的朋友可以參考下
    2024-07-07
  • Java對比兩個實體的差異分析

    Java對比兩個實體的差異分析

    這篇文章主要介紹了Java對比兩個實體的差異分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • java實現(xiàn)的RSA加密算法詳解

    java實現(xiàn)的RSA加密算法詳解

    這篇文章主要介紹了java實現(xiàn)的RSA加密算法,結合實例形式詳細分析了RSA加密解密的原理、java實現(xiàn)方法及相關注意事項,需要的朋友可以參考下
    2017-06-06
  • javaweb實現(xiàn)注冊登錄頁面

    javaweb實現(xiàn)注冊登錄頁面

    這篇文章主要為大家詳細介紹了javaweb實現(xiàn)注冊登錄頁面,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04

最新評論