国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

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

發(fā)布時(shí)間:2021-07-06 11:13 來(lái)源:腳本之家 閱讀:0 作者:kevin_ying 欄目: 開(kāi)發(fā)技術(shù) 歡迎投稿:712375056

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

MDC介紹

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

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中的鍵名稱(chēng)一致

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

添加一個(gè)controller調用測試

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

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

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

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

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

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

在中小編繼續講解子線(xiàn)程中如何實(shí)現traceId的日志跟蹤

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

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。

亚洲欧美中文字幕5发布| 成在线人午夜剧场免费无码| а√最新版地址在线天堂| 福利 无码 三级 视频| 日产精品久久久久久久| 人妻少妇AV无码一区二区|