Heim >Backend-Entwicklung >Golang >Wie protokolliere ich Echtzeit-HTTP-Antworten mit „http.HandleFunc' und Middleware?
In unserer vorherigen Diskussion haben wir die Überprüfung von HTTP-Antworten mithilfe einer gefälschten Anfrage untersucht, einer für Komponententests geeigneten Technik. Wir suchen jedoch auch nach einer Möglichkeit, Echtzeit-Antwortdaten auf einem Live-Server zu protokollieren.
Ein gängiger Ansatz besteht darin, eine Middleware-Kette zu erstellen. Bibliotheken wie Negroni bieten Middleware-Funktionalität, bei der Handler kombiniert und sequentiell ausgeführt werden. Eine minimale Middleware-Implementierung kann mithilfe von Handler-Kombinatoren erreicht werden:
<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>
Diese Kombinatoren können dann verkettet werden, um einen Handler zu bilden:
<code class="go">h := NewFooHandler(NewBarHandler(NewBazHandler(Sink)))</code>
Um diese Technik auf Ihr Problem anzuwenden, können Sie einen Handler-Kombinator erstellen:
<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>
Jetzt können Sie einen Standardhandler erstellen, der benutzerdefinierte Handler mit Antwortprotokollierung kombiniert:
<code class="go">func NewDefaultHandler(next http.HandlerFunc) http.HandlerFunc { return NewResponseLoggingHandler(NewOtherStuffHandler(next)) }</code>
Durch die Verwendung dieses Standard-Handlers:
<code class="go">h := NewDefaultHandler(...)</code>
Alle nachfolgenden Handler enthalten automatisch die Antwortprotokollierung.
Das obige ist der detaillierte Inhalt vonWie protokolliere ich Echtzeit-HTTP-Antworten mit „http.HandleFunc' und Middleware?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!