hen*_*dry 7 logging trace http go
我了解到您可以“装饰” 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
Run Code Online (Sandbox Code Playgroud)
如果我应该使用https://golang.org/pkg/context/#WithValue在结构中传递上下文,我永远感到困惑,尤其是在https://blog.golang.org/context-and -structs以传递 context.Context 作为参数结束。
从 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),
}
Run Code Online (Sandbox Code Playgroud)
此外,根据我的经验,使用context.WithValue并将上下文作为参数传递要容易得多。
在代码中替换r.RequestURI为以记录完整、有效的 URL ( https://golang.org/pkg/net/url/#URL.String )。正如代码的输出所示,客户端( https://golang.org/pkg/net/http/#Request )为空。r.URL.String()RequestURI
我不明白context.Context与你的问题有什么关系,但我相信https://blog.golang.org/context-and-structs被认为是“最佳实践”。
| 归档时间: |
|
| 查看次数: |
226 次 |
| 最近记录: |