Go でリクエストとレスポンスの両方をログに記録する
Go で複雑なアプリケーションを作成する場合、HTTP リクエストとレスポンスを効率的に処理することが重要です。 Gorilla Web ツールキットのマルチプレクサおよびハンドラー パッケージはリクエストの処理を簡素化しますが、レスポンスのログ記録は依然として課題です。
これに対処するために、Eric Broda による受け入れられた回答では、リクエストの詳細をキャプチャするソリューションが提供されています。ただし、クライアントに送信された実際の応答をログに記録することはできません。これを解決するには、コードを変更する必要があります。
func logHandler(fn http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { x, err := httputil.DumpRequest(r, true) if err != nil { http.Error(w, fmt.Sprint(err), http.StatusInternalServerError) return } log.Println(fmt.Sprintf("%q", x)) rec := httptest.NewRecorder() fn(rec, r) log.Println(fmt.Sprintf("%q", rec.Body)) // this copies the recorded response to the response writer for k, v := range rec.HeaderMap { w.Header()[k] = v } w.WriteHeader(rec.Code) rec.Body.WriteTo(w) } }
この変更されたコードは、応答をインターセプトして応答ライターにコピーし、リクエストと応答の両方のログを有効にします。
以上がGo で HTTP リクエストとレスポンスの両方を効率的に記録するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。