Java MDC依赖于线程本地存储,而Go则没有。
最接近的事情是通过您的堆栈线程上下文。
这就是越来越多的Go语言库正在做的事情。
一种比较典型的方法是通过中间件软件包来执行此操作,该中间件软件包将请求ID添加到Web请求的上下文中,例如:
req = req.WithContext(context.WithValue(req.Context(),"requestId",ID))
Run Code Online (Sandbox Code Playgroud)
然后,假设您传递了上下文,则将其拉出ctx.Value("requestId")并在有意义的地方使用它。
可能使您自己的自定义记录器功能如下:
func logStuff(ctx context.Context, msg string) {
log.Println(ctx.Value("requestId"),msg) // call stdlib logger
}
Run Code Online (Sandbox Code Playgroud)
您可能想用多种方法来处理此问题,但这是一种相当简单的形式。
| 归档时间: |
|
| 查看次数: |
1218 次 |
| 最近记录: |