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

logback和log4j日志框架堆棧信息添加TraceId方式

 更新時間:2023年09月27日 09:27:50   作者:lllllLiangjia  
這篇文章主要介紹了logback和log4j日志框架堆棧信息添加TraceId方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

背景

TraceId是我在項目上自定義的,作為鏈路追蹤來使用。至于為什么沒有用市面上skywalking此類現(xiàn)成的鏈路追蹤,是因為目前這個項目是boot單體,也不是分布式,不想引入過多比較復(fù)雜的依賴項,造成不必要的維護麻煩。

使用traceId只是來準確定位某個請求的日志信息,自己實現(xiàn)的話比較輕量化,也能夠滿足項目的開發(fā)和維護需求。

當請求訪問時,被過濾器攔截到,生成一個唯一的traceId存放在MDC中(分布式項目可以通過請求頭獲取上游服務(wù)傳過來的traceId),MDC是ThreadLocal類型線程安全的。

日志xml配置寫上traceId會自動讀取MDC。

logback日志框架

由于之前項目是使用的logback日志框架,如果只在xml日志文件中配置traceId的話,當報錯時候輸出的堆棧信息內(nèi)不會保存traceId。

到時候線上排查問題,無法通過grep命令篩選出來報錯的堆棧信息,也就不能快速定位代碼中的報錯位置。

堆棧信息不攜帶traceId

xml配置文件中的配置

堆棧信息攜帶traceId

logback想要在堆棧信息中添加traceId需要繼承ThrowableProxyConverter,重寫里面的方法。

import ch.qos.logback.classic.pattern.ThrowableProxyConverter;
import ch.qos.logback.classic.spi.IThrowableProxy;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.MDC;
public class CompressedStackTraceConverter extends ThrowableProxyConverter {
    public CompressedStackTraceConverter() {
    }
    @Override
    protected String throwableProxyToString(IThrowableProxy tp) {
        String original = super.throwableProxyToString(tp);
        String traceId = MDC.get("traceId");
        if (StringUtils.isBlank(traceId)) {
            traceId = "";
        }
        traceId = "\t[ably-stack]\t[" + traceId + "]";
        return original.replaceAll("\n", traceId + "\n");
    }
}

此時的xml配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <conversionRule conversionWord="ex"
                    converterClass="com.example.springbootdemo.configuration.httpglobal.CompressedStackTraceConverter"/>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern xml:space="preserve">
                %d{yyyy-MM-dd HH:mm:ss.SSS}|-|%lsn|-|%thread|-|%X{traceType}|-|%X{traceId}|-|%logger{80}:%L|-|%msg|-|%ex|-|%n
            </pattern>
        </encoder>
    </appender>
    <root level="info">
        <appender-ref ref="STDOUT"/>
    </root>
</configuration>

這樣logback框架就可以打印堆棧信息的時候攜帶traceId了

log4j日志框架

目前這個新項目使用的log4j這個框架,這里的traceId也是放在MDC中。

堆棧信息不攜帶traceId

堆棧信息攜帶traceId

當我配置好traceId后,開始配置堆棧信息中的traceId,發(fā)現(xiàn)ThrowableProxyConverter是logback包下面的,無法使用它來添加。

于是我在網(wǎng)上找是否log4j有對應(yīng)的像logback這種接口可以操作堆棧信息的。無果?。ㄒ灿锌赡芪覜]找到)。

后來偶然查到%throwable可以支持更改單個堆棧跟蹤元素,我就想可不可以使用它來添加traceId。

通過了解%throwable的常用方法,看到了配合{suffix(pattern)}使用,可以在每個堆棧幀的末尾添加模式輸出。

于是抱著試一試的態(tài)度就打印traceId,結(jié)果是可以的。

對應(yīng)的traceId在堆棧信息以及主日志中都打印了出來

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • IntelliJ IDEA 2020最新激活碼(親測有效,可激活至 2089 年)

    IntelliJ IDEA 2020最新激活碼(親測有效,可激活至 2089 年

    這篇文章主要介紹了IntelliJ IDEA 2021最新激活碼(親測有效,可激活至 2089 年),非常不錯,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • 一文詳解Java方法重載與遞歸應(yīng)用

    一文詳解Java方法重載與遞歸應(yīng)用

    方法重載 允許在同一個類中定義多個具有相同名稱的方法,但 參數(shù)列表 必須不同,遞歸 是一種讓函數(shù)調(diào)用自身的技術(shù),它提供了一種將復(fù)雜問題分解為簡單問題的方法,這樣更容易解決,本文詳細介紹了Java方法重載與遞歸應(yīng)用,需要的朋友可以參考下
    2024-02-02
  • java并發(fā)編程工具類PriorityBlockingQueue優(yōu)先級隊列

    java并發(fā)編程工具類PriorityBlockingQueue優(yōu)先級隊列

    這篇文章主要為大家介紹了java并發(fā)編程工具類PriorityBlockingQueue優(yōu)先級隊列的方法示例應(yīng)用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-03-03
  • Java自動讀取指定文件夾下所有文件的方法

    Java自動讀取指定文件夾下所有文件的方法

    這篇文章主要為大家詳細介紹了Java自動讀取指定文件夾下所有文件的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • 詳解備忘錄模式及其在Java設(shè)計模式編程中的實現(xiàn)

    詳解備忘錄模式及其在Java設(shè)計模式編程中的實現(xiàn)

    這篇文章主要介紹了詳解備忘錄模式及其在Java設(shè)計模式編程中的實現(xiàn),備忘錄模式數(shù)據(jù)的存儲過程中應(yīng)當注意淺拷貝和深拷貝的問題,需要的朋友可以參考下
    2016-04-04
  • java數(shù)據(jù)隨機分頁實現(xiàn)方案

    java數(shù)據(jù)隨機分頁實現(xiàn)方案

    本文主要介紹了java數(shù)據(jù)隨機分頁實現(xiàn)方案,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 淺談Java中的Queue家族

    淺談Java中的Queue家族

    Java中Collection集合有三大家族List,Set和Queue。當然Map也算是一種集合類,但Map并不繼承Collection接口。List,Set在我們的工作中會經(jīng)常使用,通常用來存儲結(jié)果數(shù)據(jù),而Queue由于它的特殊性,通常用在生產(chǎn)者消費者模式中。今天這篇文章將帶大家進入Queue家族。
    2021-06-06
  • 手把手帶你粗略了解Java--類和對象

    手把手帶你粗略了解Java--類和對象

    這篇文章主要給大家介紹了關(guān)于java中類和對象的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • Spring實戰(zhàn)之使用@Resource配置依賴操作示例

    Spring實戰(zhàn)之使用@Resource配置依賴操作示例

    這篇文章主要介紹了Spring實戰(zhàn)之使用@Resource配置依賴操作,結(jié)合實例形式分析了Spring使用@Resource配置依賴具體步驟、實現(xiàn)及測試案例,需要的朋友可以參考下
    2019-12-12
  • Java統(tǒng)計50個10到50之間整數(shù)的隨機出現(xiàn)次數(shù)

    Java統(tǒng)計50個10到50之間整數(shù)的隨機出現(xiàn)次數(shù)

    這篇文章主要為大家詳細介紹了Java統(tǒng)計50個10到50之間整數(shù)的隨機出現(xiàn)次數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07

最新評論