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