我正在使用golang编写Web应用程序,对这种语言还不太熟悉。 我正在尝试找出在golang webapp中记录请求ID的最佳方法。 我已经决定使用go的log库(https://golang.org/pkg/log/)或logrus (https://github.com/sirupsen/logrus)之一。但看起来它们都没有提供与requestId日志记录相关的内容。 因此,为了生成requestId并在整个API流程中使用它,我目前采用以下方法:
使用此处列出的任何一个uid生成库(https://golanglibs.com/search?q=id+generator&sort=top)来生成requestid。 并在处理请求的开头使用http.Handler包装器将其设置到上下文(https://golang.org/pkg/context/)中,并在所有需要进行日志记录的地方使用此上下文。
但要实现这一点,我需要将上下文对象传递给所有需要记录日志的函数。这听起来不太好,因为我涉及了所有函数的原型(即添加上下文参数)。 有没有更好的方法来做到这一点?例如ThreadLocal对象。可以从线程中的任何位置访问它,并使用它在需要时获取请求ID吗?