http - 在一个结构化的日志行中跟踪 Go 中的 HTTP 请求
问题描述
我了解到您可以“装饰”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以pass context.Context in 作为参数结束。
解决方案
通过net/http在request.go中构造请求的行为。您会看到该RequestURI
字段从未设置在那里。引用同一参考文献,
通常应该使用 URL 字段。
在 HTTP 客户端请求中设置此字段是错误的
所以,我建议你request.URL
改用。
它是从请求 uri 中解析出来的。它应该有你需要的数据。
您可以按如下方式构造输出:
f := log.Fields{
"url": fmt.Sprintf("%s %s%s", r.Method, r.URL.Host, r.URL.Path),
}
此外,根据我的经验,使用context.WithValue并将上下文作为参数传递要容易得多。
推荐阅读
- c# - ObservableCollection 绑定没有按预期工作
- dart - 从当前版本升级到最新版本时出现错误
- square-connect - 轮询 Square Device 状态
- javascript - cavsTxt.measureText 根据字体系列和字体大小为文本提供不同的宽度
- python - 从 SparseTensorValue 访问值
- php - PHP:准备好的语句不能从单引号中转义
- sql - 以垂直方式显示Sing
- timestamp - UTC时间戳需要保存在java变量中
- php - 从 ZendFramework 3 调用存储过程
- javascript - react-native 将两个数组合二为一