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 サイトの他の関連記事を参照してください。