为了账号安全,请及时绑定邮箱和手机立即绑定

在 Go 中以一个结构化日志行跟踪 HTTP 请求

在 Go 中以一个结构化日志行跟踪 HTTP 请求

Go
江户川乱折腾 2022-08-24 16:59:16
我已经了解到您可以“装饰”HTTP传输,以便您可以了解请求的详细信息,但是我无法完全弄清楚如何在同一行中记录URL。https://play.golang.org/p/g-ypQN9ceGa结果  INFO[0000] Client request            dns_start_ms=0 first_byte_ms=590 response_code=200 total_ms=590 url=   INFO[0000] 200我一直感到困惑,我是否应该使用 https://golang.org/pkg/context/#WithValue 在结构中传递上下文,特别是在 https://blog.golang.org/context-and-structs 以传递上下文结束的情况下。上下文中作为参数。
查看完整描述

2 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

从 net/http 浏览 request.go 中如何构造请求的行为。您会看到该字段从未设置在那里。引用同一参考文献RequestURI

通常应改用 URL 字段。
在 HTTP 客户端请求中设置此字段是错误的

因此,我建议您改用。
它是从请求 uri 解析而来的。它应该具有您需要的数据。request.URL

您可以按如下方式构造输出:

f := log.Fields{
    "url": fmt.Sprintf("%s %s%s", r.Method, r.URL.Host, r.URL.Path),
}

此外,根据我的经验,使用上下文要容易得多。WithValue 并将上下文作为参数传递。


查看完整回答
反对 回复 2022-08-24
?
波斯汪

TA贡献1811条经验 获得超4个赞

在代码中替换为 以记录完整、有效的 URL(https://golang.org/pkg/net/url/#URL.String)。 在客户端为空(https://golang.org/pkg/net/http/#Request),如代码输出所示。r.RequestURIr.URL.String()RequestURI

我不明白与你的问题有什么关系,但我相信 https://blog.golang.org/context-and-structs 被认为是“最佳实践”。context.Context


查看完整回答
反对 回复 2022-08-24
  • 2 回答
  • 0 关注
  • 131 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号