我阅读了有关删除 ThreadLocal 的所有决定,我可以理解。似乎传递request.Context()
typecontext.Context
赋予了管理范围服务的能力。
我正在使用logrus
日志记录并希望记录一个requestId
从 midlleware 生成的 udidgin
我知道我可以做这样的事情
func Authentication(conf Configuration, logger ILogger, cache ICacheService) gin.HandlerFunc {
return func(c *gin.Context) {
logger := logrus.WithContext(c)
c.Set("traceId", uuid.New().String())
c.Next()
}
}
并且绕过条目,甚至将条目存储在上下文中,无论如何都可以,但是......我也有一个Redis
和MongoDb
客户端,singletons
我用我自己的包包装它们,以方便记录任何传出的 I\O 请求。
因为它们是单例,所以我不能context.Context
将它传递给构造函数,但我必须将它传递给每个方法,比如GetKey
SetKet
等等。
在 Singleton 服务中使用 context \ request id 日志记录的任何常见模式?