Go 如何将整个日志发送到jaeger span

Go 如何将整个日志发送到jaeger span,go,jaeger,Go,Jaeger,有没有办法将应用程序提供的std日志和错误放在一个范围内 我知道我可以使用span.LogKV()或span.LogFields()发送一些日志,但是当应用程序记录器和span记录器都有相同的日志时,这会使代码看起来很糟糕 我正在寻找一种自动方式将所有日志放入相应的span。如果您使用带自动配置的spring boot,则使用log4j打印的日志将在span中自动插入并发送。如果您使用带自动配置的spring boot,使用log4j打印的日志将在span中自动检测和发送。在Go中,这不是很简单

有没有办法将应用程序提供的std日志和错误放在一个范围内

我知道我可以使用
span.LogKV()
span.LogFields()
发送一些日志,但是当应用程序记录器和span记录器都有相同的日志时,这会使代码看起来很糟糕


我正在寻找一种自动方式将所有日志放入相应的span。

如果您使用带自动配置的spring boot,则使用log4j打印的日志将在span中自动插入并发送。

如果您使用带自动配置的spring boot,使用log4j打印的日志将在span中自动检测和发送。

在Go中,这不是很简单,主要取决于您使用的日志库及其提供的接口。一个示例在Jaeger存储库中的中实现,并在中描述。它在下面使用
go.uber.org/zap
日志库,并允许编写接受上下文参数的日志语句:

logger.For(ctx).Info(
“搜索附近的司机”,
字符串(“位置”,位置),
)
幕后
logger.For(ctx)
捕获当前跟踪范围,并将所有日志语句添加到该范围,然后像往常一样发送到
stdout

据我所知,
go.uber.org/zap
还不支持这种本机登录模式,因此需要一个包装器

如果使用另一个日志库,而不是高级日志库,则需要这样做:

  • 必须有一种方法将上下文传递给日志方法,日志消息数据结构中的日志框架可以在内部捕获这些方法
  • 负责获取日志消息并将其写入某个输出流的“appender”(或者不管它叫什么,我使用的是log4j术语)可以扩展为从上下文检索Span,并使用
    Span.LogKV()
    或类似API将日志消息写入Span

  • 在Go中,这不是很简单,主要取决于您使用的日志库及其提供的接口。一个示例在Jaeger存储库中的中实现,并在中描述。它在下面使用
    go.uber.org/zap
    日志库,并允许编写接受上下文参数的日志语句:

    logger.For(ctx).Info(
    “搜索附近的司机”,
    字符串(“位置”,位置),
    )
    
    幕后
    logger.For(ctx)
    捕获当前跟踪范围,并将所有日志语句添加到该范围,然后像往常一样发送到
    stdout

    据我所知,
    go.uber.org/zap
    还不支持这种本机登录模式,因此需要一个包装器

    如果使用另一个日志库,而不是高级日志库,则需要这样做:

  • 必须有一种方法将上下文传递给日志方法,日志消息数据结构中的日志框架可以在内部捕获这些方法
  • 负责获取日志消息并将其写入某个输出流的“appender”(或者不管它叫什么,我使用的是log4j术语)可以扩展为从上下文检索Span,并使用
    Span.LogKV()
    或类似API将日志消息写入Span