是否有一种静态方法来获取Go中的当前请求/上下文?

时间:2017-04-10 09:11:07

标签: go

我希望我的日志记录方法输出某种请求ID。为此,我需要将一个请求对象(或一些衍生物)传递给日志记录函数。

从请求处理程序进行日志记录时这一切都很好,但是在库式方法中使用时会出现问题,因为我不希望那些人知道任何正在进行的http请求。
此外,控制台应用程序将来可能会使用这些相同的库方法,而request-id将被某种worker-thread-id替换。

使用上下文解决了问题,但这意味着我必须为我的所有方法添加一个上下文参数,这有点烦人。

所以,基本上,我需要的是在方法和goroutine调用之间传递的某种静态存储。

我不确定在Go中是否有类似的东西,所以也许我的方法完全偏离基础,在这种情况下,我很乐意听到解决上述问题的更好方法问题

谢谢,

1 个答案:

答案 0 :(得分:0)

尝试其他日志记录库。例如,在log15(https://github.com/inconshreveable/log15)中将Logger作为嵌入式键/值上下文。

logger := log.New("request_id", "8379870928")

您可以将记录器对象传递给需要记录的任何人。后来:

logger.Warn("blabalbla")

...将嵌入您放置的request_id。