この記事では、リクエストの偽装や http.ResponseWriter の変更に頼らずに、ログ記録の目的で HTTP 応答を取得する別のアプローチについて説明します。ミドルウェア チェーンの概念を導入し、関数型スタイルの実装を提供します。
ミドルウェア チェーンには、メイン リクエストの実行の前後に特定のタスクを実行するハンドラーのチェーンに制御を渡すことが含まれます。ミドルウェアとして知られるこれらのハンドラーは、リクエストとチェーン内の次のハンドラーを受け取り、順序付けられた実行を保証します。
HTTP ハンドラー コンビネーターとして機能するカスタム ミドルウェア関数を定義します。
<code class="go">func NewResponseLoggingHandler(next http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { // Replace the response writer with a recorder for subsequent handlers c := httptest.NewRecorder() next(c, r) // Copy data from the recorder to the original response writer for k, v := range c.HeaderMap { w.Header()[k] = v } w.WriteHeader(c.Code) c.Body.WriteTo(w) } }</code>
特定のカテゴリのすべてのハンドラーの自動応答ロギングを確実にするために、ロギング ミドルウェアをカプセル化する別のハンドラー コンビネーターを作成します。
<code class="go">func NewDefaultHandler(next http.HandlerFunc) http.HandlerFunc { return NewResponseLoggingHandler(NewOtherStuffHandler(next)) }</code>
次に、次を使用してインスタンス化されたハンドラー チェーンを作成します。 NewDefaultHandler には、応答ログとその他のデフォルト動作が自動的に組み込まれます。
<code class="go">h := NewDefaultHandler(...)</code>
ミドルウェア チェーンを使用すると、リクエストの偽装や http の変更を必要とせずに、HTTP 応答を透過的に傍受してログに記録できます。レスポンスライター。このアプローチにより、モジュラーロギングが可能になり、ハンドラー管理が簡素化されます。
以上がhttp.ResponseWriter を変更せずに HTTP 応答をログに記録する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。