我正在重新整理用golang编写的小型Web应用程序的日志记录。由于外部需求,日志记录已被隔离在一个地方,因此我们以后可能会切换到 日志记录服务器 。(不是我的主意- 我保证…。)尽管如此,我们现在基本上可以使用标准库的一部分以及我们正在传递的用户/会话结构来记录日期/时间,行号,用户和消息等常见信息周围。
但是-随之而来的问题是- 在较低级别的方法中,仅为了获取日志而仅为了获取用户名而在会话中传递是浪费的。因此,我想找到其他可用于在日志文件中找到一个特定请求的东西。我敢肯定,有些明显的东西我还没想到。
到目前为止的想法:
我们将大猩猩的一部分用于网络事物,除此之外,大部分都是标准库。
关于此的建议和想法?
由于滥用的可能性很高,因此无法访问Go中当前goroutine的标识符。这可能看起来很苛刻,但这实际上保留了Go软件包生态系统的重要属性: 启动新的goroutine做某事并不重要 。
也就是说,对于函数F的任何方法:
F()
几乎完全等同于:
done := make(chan struct{}) go func() { defer close(done) F() } <-done
(“几乎”来自以下事实:如果F发生恐慌,那么原始goroutine将不会抓住该恐慌)。
这也适用于日志记录- 如果您正在使用当前goroutine来推断当前用户,则如上所述启动任何新goroutine的任何代码都会破坏该假设,并且您的日志记录将不包含预期的信息。
您需要传递某种上下文。