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

詳解如何為SpringBoot Web應用的日志方便追蹤

 更新時間:2023年11月01日 08:33:32   作者:JAVA旭陽  
在Web應用程序領域,有效的請求監(jiān)控和可追溯性對于維護系統(tǒng)完整性和診斷問題至關重要,SpringBoot是一種用于構建Java應用程序的流行框架,在本文中,我們探討了在SpringBoot中向日志添加唯一ID的重要性,需要的朋友可以參考下

前言

在 Web 應用程序領域,有效的請求監(jiān)控和可追溯性對于維護系統(tǒng)完整性和診斷問題至關重要。Spring Boot 是一種用于構建 Java 應用程序的流行框架,它提供了強大的日志記錄功能,可以通過為每個傳入請求合并唯一標識符來進一步豐富這些功能。這種簡潔而強大的實踐使開發(fā)人員能夠跟蹤和分析單個請求流,從而簡化調試并增強整體系統(tǒng)的可靠性。在本文中,我們探討了在 Spring Boot 中向日志添加唯一 ID 的重要性,深入了解其實現(xiàn)以及它為應用程序開發(fā)和維護帶來的眾多好處。

問題

如今,我們通常為每項服務配備多個服務器?,F(xiàn)在有兩種檢查日志的方法,第一種是進入單個服務器實例并檢查日志。還有另一種方法可以從所有服務器收集日志,并且可以在一個地方查看它們。人們通常使用第二種方法來搜索和分析日志?,F(xiàn)在,單個服務的多個服務器有如此多的日志,跟蹤日志變得很困難。

此外,即使我們有一個服務的單個服務器,由于并發(fā)請求/線程,也會打印許多日志。面臨的一個主要問題是跟蹤,因為日志以交錯方式打印。跟蹤打印的日志變得非常困難。

解決方案

為了解決上述問題,我們需要某種與每個日志條目關聯(lián)的標識符。我們可以生成一個唯一的 ID,然后將該 ID 分配給特定請求的所有日志。因此,為特定請求生成的所有日志都將具有唯一的 ID。借助這個ID,我們可以輕松地通過日志進行追蹤。我們可以在日志中搜索這個ID并獲取特定請求的所有日志。為了在 Spring Boot 中實現(xiàn)這一點,我們可以使用 AOP。

面向方面編程(AOP)是一種編程范式,允許開發(fā)人員將橫切關注點(例如日志記錄、安全性和事務管理)模塊化,與核心業(yè)務邏輯分開,從而提高代碼的可重用性和可維護性。它通過引入“方面”來實現(xiàn)這一點,這些“方面”可以應用于代碼庫的不同部分,而無需更改原始代碼。

首先,您必須創(chuàng)建一個如下所示的請求過濾器。

/**
 * 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 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>

總結

在 Spring Boot 中為每個請求在日志中實現(xiàn)唯一的 ID 可以通過關聯(lián)應用程序不同組件之間的日志來實現(xiàn)更好的可跟蹤性和調試,特別是在并發(fā)場景中。這個唯一的標識符有助于跟蹤請求流、識別潛在問題并提高整體系統(tǒng)的可觀察性。

以上就是詳解如何為Spring Boot Web應用的日志方便追蹤的詳細內容,更多關于Spring Boot Web日志追蹤的資料請關注腳本之家其它相關文章!

相關文章

  • springboot中jsp配置tiles全過程

    springboot中jsp配置tiles全過程

    這篇文章主要介紹了springboot中jsp配置tiles全過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • 解析maven的用法和幾個常用的命令(推薦)

    解析maven的用法和幾個常用的命令(推薦)

    maven最大的作用就是用于對項目中jar包依賴的統(tǒng)一管理。這篇文章主要介紹了maven的用法和幾個常用的命令,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • SpringBoot對Druid配置SQL監(jiān)控功能失效問題及解決方法

    SpringBoot對Druid配置SQL監(jiān)控功能失效問題及解決方法

    這篇文章主要介紹了SpringBoot對Druid配置SQL監(jiān)控功能失效問題的解決方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-05-05
  • Java利用TCP實現(xiàn)服務端向客戶端消息群發(fā)的示例代碼

    Java利用TCP實現(xiàn)服務端向客戶端消息群發(fā)的示例代碼

    這篇文章主要為大家詳細介紹了Java如何利用TCP協(xié)議實現(xiàn)服務端向客戶端消息群發(fā)功能,文中的示例代碼講解詳細,需要的可以參考下,希望對你有所幫助
    2022-08-08
  • Java中ArrayList去除重復元素(包括字符串和自定義對象)

    Java中ArrayList去除重復元素(包括字符串和自定義對象)

    本文主要介紹了Java中ArrayList去除重復元素(包括字符串和自定義對象)的方法。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • 在IntelliJ IDEA中創(chuàng)建和運行java/scala/spark程序的方法

    在IntelliJ IDEA中創(chuàng)建和運行java/scala/spark程序的方法

    這篇文章主要介紹了在IntelliJ IDEA中創(chuàng)建和運行java/scala/spark程序的教程,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • spring boot項目快速構建的全步驟

    spring boot項目快速構建的全步驟

    這篇文章主要給大家介紹了關于spring boot項目快速構建的全步驟,文中通過示例代碼介紹的非常詳細,對大家學習或者使用spring boot具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-09-09
  • SpringBoot?配置文件給實體注入值方式

    SpringBoot?配置文件給實體注入值方式

    這篇文章主要介紹了SpringBoot?配置文件給實體注入值方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • JavaCV調用百度AI實現(xiàn)人臉檢測方法詳解

    JavaCV調用百度AI實現(xiàn)人臉檢測方法詳解

    在檢測人臉數(shù)量、位置、性別、口罩等場景時,可以考慮使用百度開放平臺提供的web接口,一個web請求就能完成檢測得到結果。本文就為大家介紹JavaCV如何調用百度AI實現(xiàn)最簡單的人臉檢測,需要的可以參考一下
    2022-01-01
  • Java連接FTP服務器并使用ftp連接池進行文件操作指南

    Java連接FTP服務器并使用ftp連接池進行文件操作指南

    使用FTP最主要的功能是對文件進行管理,下面這篇文章主要給大家介紹了關于Java連接FTP服務器并使用ftp連接池進行文件操作的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-08-08

最新評論