使用映射的诊断上下文进行Golang记录

时间:2016-12-08 21:03:27

标签: go mdc

如何在GoLang中实现MDC Logging(Java)?

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

1 个答案:

答案 0 :(得分:4)

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

最接近的是将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
}

您可能想要处理这种方法,但这是一种相当简单的形式。