ホームページ  >  記事  >  バックエンド開発  >  Go でリクエストとレスポンスの両方のデータをログに記録するにはどうすればよいですか?

Go でリクエストとレスポンスの両方のデータをログに記録するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-06 14:37:02587ブラウズ

How to Log Both Request and Response Data in Go?

HTTP ResponseWriter データのログ記録

Go では、リクエスト データと応答データを同時にログ記録するのが難しい場合があります。これに対処するには、すべての書き込みを複数のライターに複製する io.MultiWriter の使用を検討してください。

<code class="go">func api1(w http.ResponseWriter, req *http.Request) {
    var log bytes.Buffer
    rsp := io.MultiWriter(w, &log)
    // From this point onward, use rsp instead of w
    ...
}</code>

この設定では、rsp は w (応答ライター) とログ バッファーの両方への書き込みを複製します。ログ バッファの内容は、ロギング目的でキャプチャできます。

別のオプションは、io.TeeReader を利用してリクエスト本文からの読み取りを複製することです。これにより、リクエスト ペイロードも確実にログに記録されます。

<code class="go">func api1(w http.ResponseWriter, req *http.Request) {
    var log bytes.Buffer
    tee := io.TeeReader(req.Body, &log)
    err := json.NewDecoder(tee).Decode(&requestData)
    ...
}</code>

このシナリオでは、json.Decoder が T から読み取り、リクエスト本文をログ バッファーに効果的にコピーします。

これらの手法を実装することにより、を使用すると、リクエスト データとレスポンス データの両方をキャプチャする有意義なログを書き込むことができ、トラブルシューティングとデバッグの目的で貴重な情報を提供できます。

以上がGo でリクエストとレスポンスの両方のデータをログに記録するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。