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

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

Patricia Arquette
Patricia Arquette原創
2024-10-27 21:00:30798瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn