最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

背景

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

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

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

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

logback日志框架

由于之前項目是使用的logback日志框架,如果只在xml日志文件中配置traceId的話,當報錯時候輸出的堆棧信息內不會保存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包下面的,無法使用它來添加。

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

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

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

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

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

總結

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

相關文章

  • IntelliJ IDEA2021.1 配置大全(超詳細教程)

    IntelliJ IDEA2021.1 配置大全(超詳細教程)

    這篇文章主要介紹了IntelliJ IDEA2021.1 配置大全(超詳細教程),需要的朋友可以參考下
    2021-04-04
  • Maven中生命周期的具體使用

    Maven中生命周期的具體使用

    在 Maven 出現(xiàn)之前,項目構建的生命周期就已經存在,本文主要介紹了Maven中生命周期的具體使用,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • SpringRetry重試機制之@Retryable注解與重試策略詳解

    SpringRetry重試機制之@Retryable注解與重試策略詳解

    本文將詳細介紹SpringRetry的重試機制,特別是@Retryable注解的使用及各種重試策略的配置,幫助開發(fā)者構建更加健壯的應用程序,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • IDEA集成JProfiler11可視化工具的詳細流程(安裝、集成、測試)

    IDEA集成JProfiler11可視化工具的詳細流程(安裝、集成、測試)

    小編打算在IDEA中集成一下JProfiler11(現(xiàn)在有12版本了)工具,到網上搜都沒有找到合適的,于是自己動手寫個,關于IDEA集成JProfiler11可視化工具(安裝、集成、測試)相關知識感興趣的朋友一起看看吧
    2021-06-06
  • Java編程BigDecimal用法實例分享

    Java編程BigDecimal用法實例分享

    這篇文章主要介紹了Java編程BigDecimal用法實例分享,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Spring Boot整合全局異常處理器、junit、多環(huán)境、logback的過程

    Spring Boot整合全局異常處理器、junit、多環(huán)境、logback的過程

    本文總結了SpringBoot的異常處理、單元測試、多環(huán)境配置及日志配置的最佳實踐,重點介紹了前后端分離項目中的全局異常處理器,多環(huán)境配置文件的應用及激活方式,以及如何使用Logback進行日志記錄,感興趣的朋友跟隨小編一起看看吧
    2026-04-04
  • java利用jieba進行分詞的實現(xiàn)

    java利用jieba進行分詞的實現(xiàn)

    本文主要介紹了在Java中使用jieba-analysis庫進行分詞,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-03-03
  • Java 在生活中的 10 大應用

    Java 在生活中的 10 大應用

    這篇文章主要給大家分享Java 在生活中的 10 大應用,桌面圖形用戶界面、移動應用、人工智能、網絡應用程序、大數據技術、游戲應用、商業(yè)應用、嵌入式系統(tǒng)、云應用、科學應用,下文來看具體應用介紹,需要的朋友可以參考一下
    2021-11-11
  • Java使用反射和動態(tài)代理實現(xiàn)一個View注解綁定庫

    Java使用反射和動態(tài)代理實現(xiàn)一個View注解綁定庫

    這篇文章主要介紹了Java使用反射和動態(tài)代理實現(xiàn)一個View注解綁定庫,代碼簡潔,使用簡單,擴展性強,結合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-05-05
  • Java中Long類型傳入前端數值出錯問題

    Java中Long類型傳入前端數值出錯問題

    這篇文章主要介紹了Java中Long類型傳入前端數值出錯問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04

最新評論

和田市| 叶城县| 普格县| 台湾省| 阳东县| 呼玛县| 乐至县| 兴海县| 自贡市| 阳西县| 平顺县| 常德市| 诸城市| 雅江县| 德兴市| 高雄县| 章丘市| 习水县| 株洲县| 海盐县| 平顶山市| 孟津县| 澄城县| 施秉县| 鞍山市| 疏勒县| 江门市| 双桥区| 西宁市| 光山县| 罗江县| 凭祥市| 安达市| 东至县| 泉州市| 神农架林区| 云浮市| 济南市| 温泉县| 德清县| 叙永县|