golang slog 包中的相关 ID 或跟踪 ID

Man*_*umi 3 logging go

我正在使用新的 golang slog 包来输出 JSON。这是我的方法:

logger := slog.New(slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{
    AddSource: true,
}))
slog.SetDefault(logger)
Run Code Online (Sandbox Code Playgroud)

我在 main 函数中设置了它,然后在需要的地方使用 slog 。问题是我需要添加跟踪 ID 或关联 ID,以便当请求到达某个 URL 时,我可以使用该 ID 进行搜索并跟踪该请求的所有日志。

我已经尝试过下面的代码,但它不起作用:

ctx := context.Background()
ctx = context.WithValue(ctx, "hello", "world")
slog.InfoContext(ctx, "testing testing")
slog.InfoContext(ctx, "another testing")
Run Code Online (Sandbox Code Playgroud)

我按照这篇文章进行设置,但找不到配置跟踪器 ID 选项的方法。我正在关注 datadog 的另一篇文章,但它没有完整的代码。

任何帮助将非常感激。

Bur*_*dar 5

您可以简单地从上下文中获取跟踪 ID,用它创建一个新的记录器,然后使用它:

traceId:=ctx.Value("traceId")
newLogger:=logger.With("traceId",traceId)
// use newLogger that will add traceId to all messages
Run Code Online (Sandbox Code Playgroud)