Heim >Backend-Entwicklung >Golang >Golang benutzerdefinierte ServeHTTP-Statusprotokollierung

Golang benutzerdefinierte ServeHTTP-Statusprotokollierung

WBOY
WBOYnach vorne
2024-02-11 12:54:081257Durchsuche

Golang 自定义 ServeHTTP 状态日志记录

php-Editor Banana stellt Ihnen Golangs benutzerdefinierte ServeHTTP-Statusprotokollierung vor. In Golang ist die ServeHTTP-Funktion eine der Schlüsselfunktionen zur Verarbeitung von HTTP-Anfragen. Durch Anpassen der ServeHTTP-Funktion können wir die Statusinformationen jeder Anfrage aufzeichnen und verfolgen, um unsere Anwendung besser zu verstehen und zu debuggen. In diesem Artikel wird detailliert beschrieben, wie Sie die ServeHTTP-Funktion in Golang anpassen und die Statusprotokollierungsfunktion implementieren, um unsere Entwicklungseffizienz und Anwendungsstabilität zu verbessern. Egal, ob Sie Anfänger oder erfahrener Entwickler sind, dieser Artikel hilft Ihnen, die ServeHTTP-Funktion von Golang besser zu verstehen und anzuwenden.

Frageninhalt

Ich baue mein eigenes Web-Framework und stoße auf ein Problem. Wenn ich versuche, eine Anfrage mit einem Antwortstatuscode zu protokollieren, erhalte ich die Fehlermeldung: Ungültige Speicheradresse oder Null-Zeiger-Dereferenzierung p>

My ServeHTTP-Funktion:

func (r *Router) ServeHTTP(w http.ResponseWriter, req *http.Request) {

    handler := r.getHandler(req.Method, req.URL.Path)
    if handler == nil {
        notFoundHandler(w, req)
        return
    }
    done := make(chan struct{})

    reqStruct := newReqStruct(w, req)

    go func() {
        handler(reqStruct)
        done <- struct{}{}
        close(done)
    }()
    <-done
    logger.logRequest(req.URL.Path, req.Method, req.Response.StatusCode)

}

Lösung

Diese Zeile:

logger.logRequest(req.URL.Path, req.Method, req.Response.StatusCode)

req.Response Wird nur für HTTP-Weiterleitungen ausgefüllt. In diesem Fall wird es Null sein.

Wenn Sie den Antwortcode erfassen möchten, schreiben Sie einen Wrapper-Antwortschreiber und implementieren Sie WriteHeader, um den Antwortcode zu erfassen.

Das obige ist der detaillierte Inhalt vonGolang benutzerdefinierte ServeHTTP-Statusprotokollierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen