我怎样才能实现MDC 日志记录(Java) 在 Go 语言中?
我需要在所有服务器日志中添加 UUID,以便能够跟踪并发请求。
Java MDC 依赖于线程本地存储,这是 Go 所没有的。
最接近的是线程aContext通过你的堆栈。
这就是越来越多的库在 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
}
您可能想要使用多种方法来处理此问题,但这是一种相当简单的形式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)