
この記事では、リクエストの偽装や 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 サイトの他の関連記事を参照してください。