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

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

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

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

Go
慕森王 2023-06-19 17:00:33
我想將跟蹤 ID 添加到針對微服務(wù)的每個(gè)請求完成的日志記錄中。我希望這與 springboot 應(yīng)用程序類似,我們可以在 MDC 中設(shè)置跟蹤 ID 并獲取它并在日志記錄時(shí)使用它。我做了一些研究,發(fā)現(xiàn) go lang 中的 MDC 等價(jià)物是上下文。所以,我已經(jīng)在我的上下文中設(shè)置了跟蹤 ID?,F(xiàn)在的問題是我必須使用跟蹤 ID 登錄的地方,我需要將上下文傳遞給該函數(shù),這是非常丑陋的方式。我正在為這個(gè)問題尋找更好的解決方案。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貢獻(xiàn)2080條經(jīng)驗(yàn) 獲得超4個(gè)贊

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

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

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

有兩種主要模式

  1. 詢問上下文給你一個(gè)記錄器

  2. 為記錄器提供上下文

上下文可用于存儲值:

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

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

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

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


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

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超6個(gè)贊

在我這邊,我發(fā)現(xiàn)使用默認(rèn)的日志包我們可以將前綴設(shè)置為log.SetPrefix(traceId),這樣做,日志將打印跟蹤 ID 作為實(shí)際和子函數(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("......")

}


查看完整回答
反對 回復(fù) 2023-06-19
?
DIEA

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超2個(gè)贊

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

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

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

此外,這種方法可能會有一些性能和內(nèi)存問題,因?yàn)槲覀儗槊總€(gè)請求重新創(chuàng)建對象。


查看完整回答
反對 回復(fù) 2023-06-19
  • 3 回答
  • 0 關(guān)注
  • 597 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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