gpt4 book ai didi

带有映射诊断上下文的 Golang 日志记录

转载 作者:IT王子 更新时间:2023-10-29 01:54:41 25 4
gpt4 key购买 nike

我怎样才能实现 MDC Logging (Java)在 Go 语言中?

我需要在所有服务器日志中添加 UUID,以便能够跟踪并发请求。

最佳答案

Java MDC 依赖于线程本地存储,这是 Go 所没有的。

最接近的是线程a Context通过你的堆栈。

这就是越来越多的库在 Go 中所做的事情。

一种有点典型的方法是通过一个中间件包来实现,该中间件包将请求 ID 添加到 Web 请求的上下文中,例如:

req = req.WithContext(context.WithValue(req.Context(),"requestId",ID))

然后,假设您传递了上下文,您可以使用 ctx.Value("requestId") 将其提取出来并在任何有意义的地方使用它。

可能使您自己的自定义记录器功能如下:

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

您可能想通过多种方式来处理此问题,但这是一种相当简单的形式。

关于带有映射诊断上下文的 Golang 日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41048757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com