日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

基于Spring Boot,為網(wǎng)絡(luò)請求添加唯一日志id

來源: 責(zé)編: 時間:2024-01-02 09:31:09 236觀看
導(dǎo)讀1 簡介在Web應(yīng)用程序的世界中,有效的請求監(jiān)控和可追蹤性對于維護系統(tǒng)完整性和診斷問題至關(guān)重要。Spring Boot是一種流行的Java框架,用于構(gòu)建應(yīng)用程序,并提供強大的日志記錄功能。為了進一步豐富這一功能,可以通過為每個傳

1 簡介

在Web應(yīng)用程序的世界中,有效的請求監(jiān)控和可追蹤性對于維護系統(tǒng)完整性和診斷問題至關(guān)重要。Spring Boot是一種流行的Java框架,用于構(gòu)建應(yīng)用程序,并提供強大的日志記錄功能。為了進一步豐富這一功能,可以通過為每個傳入請求添加唯一標(biāo)識符來增強日志記錄能力。這種簡潔而強大的實踐使開發(fā)人員能夠跟蹤和分析單個請求的流程,簡化調(diào)試,并增強整個系統(tǒng)的可靠性。dyc28資訊網(wǎng)——每日最新資訊28at.com

本文我們強調(diào)在Spring Boot中為日志添加唯一標(biāo)識符的重要性,介紹其實現(xiàn)方式以及其為應(yīng)用程序開發(fā)和維護帶來的眾多優(yōu)勢好處。dyc28資訊網(wǎng)——每日最新資訊28at.com

2 問題描述

如今,每個服務(wù)通常都有多個服務(wù)器實例。有兩種方法可以查看日志,一種是逐個訪問各個服務(wù)器實例以查看日志,另一種是收集所有服務(wù)器的日志到一個集中地點進行查看。通常情況下,人們會選擇第二種方法,使用像GCP中的Log Explorer這樣的工具來搜索和分析日志。然而,由于來自多個服務(wù)器的大量日志,追蹤這些日志變得困難。dyc28資訊網(wǎng)——每日最新資訊28at.com

此外,即使對于只有一個服務(wù)的單個服務(wù)器,由于并發(fā)請求和線程,日志會被打印出很多條。其中一個主要問題是日志打印的交錯性,很難跟蹤打印出的日志。dyc28資訊網(wǎng)——每日最新資訊28at.com

3 解決方案

為了解決上述問題,需要為每個日志條目關(guān)聯(lián)一種標(biāo)識符。我們可以生成一個唯一的ID,然后將該ID分配給特定請求的所有日志。因此,為特定請求生成的所有日志都具有唯一的ID。借助這個ID,可以便捷地跟蹤日志。我們可以在日志中搜索此ID并獲取特定請求的所有日志。在Spring Boot中實現(xiàn)這一點,可以使用AOP。dyc28資訊網(wǎng)——每日最新資訊28at.com

面向方面的編程(AOP)是一種編程范式,允許開發(fā)人員將橫切關(guān)注點(如日志記錄、安全性和事務(wù)管理)與核心業(yè)務(wù)邏輯分開模塊化,促進代碼的可重用性和可維護性。它通過引入“切面”在代碼庫的不同部分應(yīng)用,而無需修改原始代碼。dyc28資訊網(wǎng)——每日最新資訊28at.com

首先,需要創(chuàng)建一個請求過濾器,如下所示:dyc28資訊網(wǎng)——每日最新資訊28at.com

/** * A filter that adds a key to the Mapped Diagnostic Context (MDC) to each request so you can print a unique id in the log messages of each request **/@EqualsAndHashCode(callSuper = false)@Component@Slf4jpublic class Slf4jMDCFilter extends OncePerRequestFilter {    @Override    protected void doFilterInternal(final HttpServletRequest request, final HttpServletResponse response, final FilterChain chain) {        try {            MDC.put(MDC_UUID_TOKEN_KEY, UUID.randomUUID().toString());            chain.doFilter(request, response);        } catch (Exception ex) {            log.error(ERROR_FORMAT, "Exception occurred in filter while setting UUID for logs", ex);        } finally {            MDC.remove(MDC_UUID_TOKEN_KEY);        }    }    @Override    protected boolean isAsyncDispatch(final HttpServletRequest request) {        return false;    }    @Override    protected boolean shouldNotFilterErrorDispatch() {        return false;    }}

上述代碼對每個API請求運行一次,并將相同的唯一ID添加到為特定請求生成的所有日志中。接下來,需要將上述AOP過濾器注冊為一個bean,如下所示:dyc28資訊網(wǎng)——每日最新資訊28at.com

@Configuration@RequiredArgsConstructorpublic class BeanConfig {    private final Slf4jMDCFilter slf4jMDCFilter;    @Bean    public FilterRegistrationBean<Slf4jMDCFilter> servletRegistrationBean() {        final FilterRegistrationBean<Slf4jMDCFilter> filterRegistrationBean = new FilterRegistrationBean<>();        filterRegistrationBean.setFilter(slf4jMDCFilter);        filterRegistrationBean.setOrder(2);        return filterRegistrationBean;    }}

然后,需要在日志配置文件中添加一個appender,如下所示:dyc28資訊網(wǎng)——每日最新資訊28at.com

<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">    <layout class="ch.qos.logback.classic.PatternLayout">        <Pattern>            %black(%d{ISO8601}) %X{Slf4jMDCFilter.UUID} %highlight(%-5level) [%blue(%t)] %yellow(%C{1}.): %msg%n%throwable        </Pattern>    </layout></appender>

4 結(jié)語

在Spring Boot中為每個請求的日志實現(xiàn)唯一標(biāo)識符可以通過關(guān)聯(lián)應(yīng)用程序的不同組件中的日志,特別是在并發(fā)情況下,提供更好的可追蹤性和調(diào)試能力。這個唯一標(biāo)識符有助于跟蹤請求的流程,識別潛在問題,并提高整個系統(tǒng)的可觀察性。dyc28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-55172-0.html基于Spring Boot,為網(wǎng)絡(luò)請求添加唯一日志id

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Saga 模式 | 如何使用微服務(wù)實現(xiàn)業(yè)務(wù)事務(wù)

下一篇: Saga 模式 | 如何使用微服務(wù)實現(xiàn)業(yè)務(wù)事務(wù)

標(biāo)簽:
  • 熱門焦點
  • 一加Ace2 Pro真機揭曉 鈦空灰配色質(zhì)感拉滿

    終于,在經(jīng)過了幾波預(yù)熱之后,一加Ace2 Pro的外觀真機圖在網(wǎng)上出現(xiàn)了。還是博主數(shù)碼閑聊站曝光的,這次的外觀設(shè)計還是延續(xù)了一加11的方案,只是細節(jié)上有了調(diào)整,例如新加入了鈦空灰
  • 三言兩語說透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是兩種很有用的技術(shù),可以幫助我們寫出更加優(yōu)雅、泛用的函數(shù)。本文將首先介紹柯里化和反柯里化的概念、實現(xiàn)原理和應(yīng)用
  • 自動化在DevOps中的力量:簡化軟件開發(fā)和交付

    自動化在DevOps中扮演著重要角色,它提升了DevOps的效能。通過自動化工具和方法,DevOps團隊可以實現(xiàn)以下目標(biāo):消除手動和重復(fù)性任務(wù)。簡化流程。在整個軟件開發(fā)生命周期中實現(xiàn)更
  • 從零到英雄:高并發(fā)與性能優(yōu)化的神奇之旅

    作者 | 波哥審校 | 重樓作為公司的架構(gòu)師或者程序員,你是否曾經(jīng)為公司的系統(tǒng)在面對高并發(fā)和性能瓶頸時感到手足無措或者焦頭爛額呢?筆者在出道那會為此是吃盡了苦頭的,不過也得
  • 一個注解實現(xiàn)接口冪等,這樣才優(yōu)雅!

    場景碼猿慢病云管理系統(tǒng)中其實高并發(fā)的場景不是很多,沒有必要每個接口都去考慮并發(fā)高的場景,比如添加住院患者的這個接口,具體的業(yè)務(wù)代碼就不貼了,業(yè)務(wù)偽代碼如下:圖片上述代碼有
  • 認(rèn)真聊聊東方甄選:如何告別低垂的果實

    來源:山核桃作者:財經(jīng)無忌爆火一年后,俞敏洪和他的東方甄選依舊是頗受外界關(guān)心的&ldquo;網(wǎng)紅&rdquo;。7月5日至9日,為期5天的東方甄選&ldquo;甘肅行&rdquo;首次在自有App內(nèi)直播,
  • 重估百度丨大模型,能撐起百度的“今天”嗎?

    自象限原創(chuàng) 作者|程心 羅輯2023年之前,對于自己的&ldquo;今天&rdquo;,百度也很迷茫。&ldquo;新業(yè)務(wù)到 2022 年底還是 0,希望 2023 年出來一個 1。&rdquo;這是2022年底,李彥宏
  • 聯(lián)想的ThinkBook Plus下一版曝光,鍵盤旁邊塞個平板

    ThinkBook Plus 是聯(lián)想的一個特殊筆記本類別,它在封面放入了一塊墨水屏,也給人留下了較為深刻的印象。據(jù)有人爆料,聯(lián)想的下一款 ThinkBook Plus 可能更特殊,它
  • 親歷馬斯克血洗Twitter,硅谷的苦日子在后頭

    文/劉哲銘  編輯/李薇  馬斯克再次揮下裁員大刀?! ∶绹鴷r間11月14日,Twitter約4400名外包員工遭解雇,此次被解雇的員工的主要工作為內(nèi)容審核等。此前,T
Top 主站蜘蛛池模板: 泾阳县| 永康市| 克东县| 慈利县| 延川县| 察哈| 邮箱| 邢台市| 九寨沟县| 荣昌县| 象山县| 凤庆县| 惠东县| 潞城市| 桂林市| 峨山| 广丰县| 西昌市| 阿克| 陈巴尔虎旗| 拉萨市| 武乡县| 望都县| 保靖县| 汶川县| 大渡口区| 兴化市| 神池县| 定远县| 襄垣县| 留坝县| 奉新县| 永嘉县| 江达县| 鄱阳县| 凤庆县| 邢台县| 安溪县| 三门峡市| 沂源县| 团风县|