Go で http.ResponseWriter からの応答データをログに記録する方法は?

Patricia Arquette
リリース: 2024-11-06 01:41:02
オリジナル
728 人が閲覧しました

How to Log Response Data from http.ResponseWriter in Go?

http.ResponseWriter からのデータのログ記録

Go では、さまざまな手法を使用して、HTTP リクエストとレスポンスのサイクルから出力されたデータをログ記録できます。よくある質問の 1 つは、ログの目的で http.ResponseWriter に書き込まれるデータを取得することです。

解決策: io.MultiWriter を使用する

応答データをキャプチャするには、次のコマンドを利用できます。 io.MultiWriter を使用して書き込みを別のライターに複製します。コード内で、ログ バッファとして新しい bytes.Buffer インスタンスを作成し、それをライターの 1 つとして io.MultiWriter に渡すことができます。 MultiWriter を応答ライターとして使用すると、応答データをログ バッファに複製できます。

コード例:

<code class="go">import (
    "bytes"
    "io"
    "net/http"
)

func api1(w http.ResponseWriter, req *http.Request) {
    var log bytes.Buffer
    rsp := io.MultiWriter(w, &log)
    // Use rsp instead of w from this point onward
    // ...
}</code>
ログイン後にコピー

ここで、ログ バッファ (

代替解決策: io.TeeReader を使用する

リクエスト データをキャプチャするには、以下を使用できます。 io.TeeReader。指定されたリーダーから読み取ったものを、指定されたライターに書き込むリーダーを作成します。この場合、これを使用してリクエスト本文のコピーをログ バッファーに保存できます。

コード例:

<code class="go">import (
    "bytes"
    "io"
    "net/http"
)

func api1(w http.ResponseWriter, req *http.Request) {
    var log bytes.Buffer
    tee := io.TeeReader(req.Body, &log)
    // Use tee instead of req.Body from this point onward
    // ...
}</code>
ログイン後にコピー

io.TeeReader を使用すると、ログ バッファにはリクエスト本文の内容のコピーが含まれます。

これらの手法を利用すると、リクエスト データとレスポンス データの両方をログに記録でき、API リクエストの包括的なログ記録が容易になります。

以上がGo で http.ResponseWriter からの応答データをログに記録する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!