第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

go微服務中如何給每條日志添加trace id

go微服務中如何給每條日志添加trace id

Go
慕森王 2023-06-19 17:00:33
我想將跟蹤 ID 添加到針對微服務的每個請求完成的日志記錄中。我希望這與 springboot 應用程序類似,我們可以在 MDC 中設置跟蹤 ID 并獲取它并在日志記錄時使用它。我做了一些研究,發(fā)現(xiàn) go lang 中的 MDC 等價物是上下文。所以,我已經(jīng)在我的上下文中設置了跟蹤 ID。現(xiàn)在的問題是我必須使用跟蹤 ID 登錄的地方,我需要將上下文傳遞給該函數(shù),這是非常丑陋的方式。我正在為這個問題尋找更好的解決方案。func HandlerFunction(f gin.HandlerFunc) gin.HandlerFunc{    return func(cxt *gin.Context) {        reqraceId := cxt.Request.Header.Get("trace-id")        requid , _ := uuid.NewRandom()        if reqTraceId == "" {            c.Request.Header.Set("trace-id", requid.String())        }        f(c)    }}
查看完整描述

3 回答

?
犯罪嫌疑人X

TA貢獻2080條經(jīng)驗 獲得超4個贊

context.Context其中有一節(jié)說:

在谷歌,我們要求 Go 程序員將 Context 參數(shù)作為第一個參數(shù)傳遞給傳入和傳出請求之間的調(diào)用路徑上的每個函數(shù)。

TL;DR - 傳遞上下文很好,但最好的方法是什么?

有兩種主要模式

  1. 詢問上下文給你一個記錄器

  2. 為記錄器提供上下文

上下文可用于存儲值:

context.WithValue(ctx,?someKey,?someValue)

這意味著我們可以這樣做:

somepackage.Log(ctx).Info("hello?world")
//?or
sompackage.Info(ctx,?"hello?world")

這兩個示例 API 的實現(xiàn)可以與上下文交互以檢索所需的值,而無需擔心任何日志調(diào)用站點的 MDC 中的額外信息。


查看完整回答
反對 回復 2023-06-19
?
慕妹3242003

TA貢獻1824條經(jīng)驗 獲得超6個贊

在我這邊,我發(fā)現(xiàn)使用默認的日志包我們可以將前綴設置為log.SetPrefix(traceId),這樣做,日志將打印跟蹤 ID 作為實際和子函數(shù)/結(jié)構(gòu)中的前綴。


import (

    "log"

    "github.com/google/uuid"

)


func (hdl *HTTPHandler) example() {

    var traceId string = uuid.NewString()

    log.SetPrefix(traceId + " - ")

    log.SetFlags(log.LstdFlags)

    // ...

    // ...

    log.Println("......")

}


查看完整回答
反對 回復 2023-06-19
?
DIEA

TA貢獻1820條經(jīng)驗 獲得超3個贊

這個問題也可以使用依賴注入容器來解決。

我們可以實現(xiàn)“請求范圍”注入,因此,對于每個請求,我們將重新創(chuàng)建所有使用請求范圍依賴項的依賴樹(記錄器、錯誤報告器、通過上下文傳播將請求發(fā)送到另一個服務的客戶端)。

但據(jù)我所知,使用依賴注入容器并不是最佳實踐,也不是“慣用”方式。

此外,這種方法可能會有一些性能和內(nèi)存問題,因為我們將為每個請求重新創(chuàng)建對象。


查看完整回答
反對 回復 2023-06-19
  • 3 回答
  • 0 關注
  • 640 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號