亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

在所有記錄器中使用請求 ID

在所有記錄器中使用請求 ID

Go
開心每一天1111 2022-08-01 11:09:04
我有一些使用go http的Web應用程序服務器,我希望每個請求都有uuid的上下文,為此,我可以使用http請求上下文 https://golang.org/pkg/net/http/#Request.Context我們正在使用logrus,我們在一個文件中啟動它,并在其他文件中使用記錄器實例。我需要的是在所有日志中打印請求ID,但不要在每個日志打印中添加新的paremeters,我想在每個http請求中對它做一次(傳遞req-id),所有日志打印都將擁有它而無需對它做任何事情例如,如果這樣會打印id=123log.info("foo")// id=123 foo 我已經嘗試了以下內容,但不確定這是正確的方法,請建議。package mainimport (    "context"    "errors"    log "github.com/sirupsen/logrus")type someContextKey stringvar (    keyA = someContextKey("a")    keyB = someContextKey("b"))func main() {    ctx := context.Background()    ctx = context.WithValue(ctx, keyA, "foo")    ctx = context.WithValue(ctx, keyB, "bar")    logger(ctx, nil).Info("did nothing")    err := errors.New("an error")    logger(ctx, err).Fatal("unrecoverable error")}func logger(ctx context.Context, err error) *log.Entry {    entry := log.WithField("component", "main")    entry = entry.WithField("ReqID", "myRequestID")    return entry}https://play.golang.org/p/oCW09UhTjZ5
查看完整描述

1 回答

?
瀟湘沐

TA貢獻1816條經驗 獲得超6個贊

每次調用該函數時,都會創建一個新的 *log。輸入并再次將請求 ID 寫入其中。從你的問題來看,聽起來你不希望這樣。logger


func main() {

    ctx := context.Background()

    ctx = context.WithValue(ctx, keyA, "foo")

    ctx = context.WithValue(ctx, keyB, "bar")


    lg := logger(ctx)

    lg.Info("did nothing")

    err := errors.New("an error")

    lg.WithError(err).Fatal("unrecoverable error")

}


func logger(ctx context.Context) *log.Entry {

    entry := log.WithField("component", "main")

    entry = entry.WithField("ReqID", "myRequestID")


    return entry

}

這樣做的缺點是,您必須將變量傳遞給此請求調用的每個函數,并且該函數還應記錄請求 ID。lg


我們在公司所做的是創建一個薄層,該層具有一個額外的方法,因此我們可以傳入請求上下文,它將提取請求ID本身(我們已經在中間件中寫入了上下文)。如果不存在任何請求 ID,則不會向日志條目添加任何內容。但是,這確實將請求 ID 再次添加到每個日志條目中,就像您的示例代碼一樣。logrusWithRequestCtx


注意:我們圍繞logrus的薄層具有更多的功能和默認設置,以證明額外的努力是合理的。從長遠來看,有一個地方能夠調整我們所有服務的日志記錄是非常有幫助的。


注意2:同時,我們正在用零日志替換logrus,以使其更加輕量級。


查看完整回答
反對 回復 2022-08-01
  • 1 回答
  • 0 關注
  • 166 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號