前の説明では、単体テストに適した手法である偽のリクエストを使用した HTTP 応答の検査について説明しました。ただし、リアルタイムの応答データをライブ サーバーに記録する方法も模索しています。
一般的なアプローチには、ミドルウェア チェーンの作成が含まれます。 Negroni などのライブラリは、ハンドラーを組み合わせて順番に実行するミドルウェア機能を提供します。最小限のミドルウェア実装は、ハンドラー コンビネータを使用して実現できます:
<code class="go">func NewFooHandler(next http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { // Do pre-handling tasks next(w, r) // Do post-handling tasks } }</code>
これらのコンビネータをチェーンしてハンドラを形成できます:
<code class="go">h := NewFooHandler(NewBarHandler(NewBazHandler(Sink)))</code>
この手法を問題に適用するには、ハンドラー コンビネータを作成します:
<code class="go">func NewResponseLoggingHandler(next http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { // Record the response c := httptest.NewRecorder() next(c, r) // Copy responses 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>
このデフォルトのハンドラーを使用すると、
<code class="go">h := NewDefaultHandler(...)</code>
後続のすべてのハンドラーには、自動的に応答ログが含まれます。
以上が`http.HandleFunc` とミドルウェアを使用してリアルタイム HTTP 応答をログに記録するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。