首頁 > 後端開發 > Golang > 如何在 GoLang 中實作 MDC 日誌記錄?

如何在 GoLang 中實作 MDC 日誌記錄?

Patricia Arquette
發布: 2024-10-27 21:00:30
原創
929 人瀏覽過

How can you implement MDC logging in GoLang?

GoLang 中的 MDC 日誌記錄

Java 的 MDC 日誌記錄依賴於線程本地存儲,這在 GoLang 中不可用。然而,透過堆疊中的線程化 Context 可以實現類似的功能。

Java MDC 依賴線程本地存儲,這是 Go 所不具備的。最接近的是透過堆疊線程化上下文,這正在成為 Go 庫中的常見做法。

實現此目的的一種方法是透過中介軟體包將請求 ID 新增至 Web 請求的上下文。然後可以在整個堆疊中檢索和使用此 ID 以進行日誌記錄。

這是一個中間件包的簡單範例:

req = req.WithContext(context.WithValue(req.Context(), "requestId", ID))
登入後複製

然後可以使用以下方式檢索請求ID:

ctx.Value("requestId")
登入後複製

此值可以在自訂記錄器函數中使用:

func logStuff(ctx context.Context, msg string) {
    log.Println(ctx.Value("requestId"), msg) // call stdlib logger
}
登入後複製

此方法可以透過向所有伺服器日誌新增唯一ID 來輕鬆追蹤並發請求。還有其他可能的實現,但這個提供了一種在 GoLang 中實現類似 MDC 的日誌記錄的簡單方法。

以上是如何在 GoLang 中實作 MDC 日誌記錄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板