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

當前位置:首頁 > 科技  > 軟件

基于Spring Boot,為網絡請求添加唯一日志id

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

1 簡介

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

本文我們強調在Spring Boot中為日志添加唯一標識符的重要性,介紹其實現方式以及其為應用程序開發和維護帶來的眾多優勢好處。PsI28資訊網——每日最新資訊28at.com

2 問題描述

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

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

3 解決方案

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

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

首先,需要創建一個請求過濾器,如下所示:PsI28資訊網——每日最新資訊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,如下所示:PsI28資訊網——每日最新資訊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,如下所示:PsI28資訊網——每日最新資訊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 結語

在Spring Boot中為每個請求的日志實現唯一標識符可以通過關聯應用程序的不同組件中的日志,特別是在并發情況下,提供更好的可追蹤性和調試能力。這個唯一標識符有助于跟蹤請求的流程,識別潛在問題,并提高整個系統的可觀察性。PsI28資訊網——每日最新資訊28at.com

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

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

上一篇: Saga 模式 | 如何使用微服務實現業務事務

下一篇: Saga 模式 | 如何使用微服務實現業務事務

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 纳雍县| 宝清县| 驻马店市| 青铜峡市| 清镇市| 湖北省| 蒙山县| 泽普县| 汉川市| 公主岭市| 阿巴嘎旗| 皮山县| 文成县| 平远县| 贵港市| 乌拉特前旗| 武城县| 布拖县| 财经| 威海市| 南陵县| 互助| 忻城县| 宜宾市| 武宁县| 永丰县| 徐州市| 永顺县| 阳朔县| 安国市| 永宁县| 高台县| 和政县| 莎车县| 昭通市| 武乡县| 墨江| 江川县| 上蔡县| 龙岩市| 双江|