成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發 前端
在Spring Boot中為每個請求的日志實現唯一標識符可以通過關聯應用程序的不同組件中的日志,特別是在并發情況下,提供更好的可追蹤性和調試能力。

1 簡介

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

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

2 問題描述

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

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

3 解決方案

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

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

首先,需要創建一個請求過濾器,如下所示:

/**
 * 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
@Slf4j
public 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,如下所示:

@Configuration
@RequiredArgsConstructor
public 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,如下所示:

<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中為每個請求的日志實現唯一標識符可以通過關聯應用程序的不同組件中的日志,特別是在并發情況下,提供更好的可追蹤性和調試能力。這個唯一標識符有助于跟蹤請求的流程,識別潛在問題,并提高整個系統的可觀察性。

責任編輯:武曉燕 來源: Java學研大本營
相關推薦

2020-09-14 13:12:17

支付中心數據架構

2022-05-07 10:09:01

開發Java日志

2023-07-31 16:06:26

log4j2日志脫敏

2025-05-28 03:15:00

Scrapy數據sleep

2021-04-12 21:19:01

PythonMakefile項目

2022-02-17 13:39:09

AOP接口方式

2014-08-15 13:53:43

WindowsWindows 8.1

2022-11-18 08:31:56

Spring日志工具

2021-08-11 05:00:48

Spring 日志手段

2022-08-26 09:34:19

單元測試代碼項目

2009-03-19 09:39:29

SQL Server數SQL ServerSQL Server

2023-09-18 11:36:35

2025-01-08 09:35:55

Spring性能監控

2021-06-18 05:54:27

MongoDB數據

2009-09-09 23:05:52

Ubuntu活動日

2021-10-15 21:08:31

PandasExcel對象

2021-04-27 22:15:02

Selenium瀏覽器爬蟲

2009-05-28 09:46:37

2010-11-04 10:16:38

db2日志保存
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久精品久久久久久 | 一区二区三区四区在线播放 | 亚洲国产精品一区二区三区 | 在线一区| 午夜影院视频在线观看 | 欧美综合精品 | 国产成人免费视频网站视频社区 | 一区二区在线观看免费视频 | 国产 日韩 欧美 中文 在线播放 | 日韩欧美网 | 日韩高清av| 久久福利电影 | 夜夜操av | 国产精品高清一区二区三区 | 欧美精品综合在线 | 日韩久草| 天天久久 | 亚洲综合电影 | 国产高清精品一区 | 黄色网址在线免费观看 | 色资源在线观看 | 国产婷婷综合 | 日韩欧美一区二区三区免费观看 | 国产一级淫片免费视频 | 网站国产| 黑人中文字幕一区二区三区 | 91在线| 天天看天天操 | 91福利影院 | 一区二区国产精品 | 中文字幕一区二区三区四区五区 | 中文字幕日本一区二区 | 国产乱肥老妇国产一区二 | 国产精久久久久久久妇剪断 | 91精品国产综合久久久久久丝袜 | 91精品国产综合久久福利软件 | 在线播放第一页 | 日韩在线资源 | www.国产精品 | 国产久| 国产精品久久久久久久久久免费看 |