有什么方法可以将应用程序提供的 std 日志和错误放在一个范围内?
我知道我可以使用span.LogKV()
or发送一些日志,span.LogFields()
但是当应用程序记录器和跨度记录器具有相同的日志时,它会使代码看起来很糟糕。
我正在寻找一种将所有日志放到相应跨度的自动化方法。
如果您使用带有自动配置的 spring boot,则使用 log4j 打印的日志将被检测并在 span 中自动发送。
在 Go 中,这不是很简单,很大程度上取决于您使用的日志库和它提供的接口。Jaeger 存储库中的HotROD 演示中实现了一个示例,该示例随附的博客文章中对此进行了描述。它go.uber.org/zap
在下面使用日志库,并允许编写接受 Context 参数的日志语句:
logger.For(ctx).Info(
"Searching for nearby drivers",
zap.String("location", location),
)
在幕后logger.For(ctx)
捕获当前跟踪跨度并将所有日志语句添加到该跨度,除了stdout
像往常一样发送 then 到。
据我所知,go.uber.org/zap
目前还不支持这种本地记录模式,因此需要一个包装器。
如果您使用另一个日志库,那么在高级别上,这就是需要发生的事情:
span.LogKV()
或类似API。