Heim  >  Artikel  >  Backend-Entwicklung  >  Wie protokolliere ich 404-Fehler im HTTP-Dateiserver von Go?

Wie protokolliere ich 404-Fehler im HTTP-Dateiserver von Go?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-26 20:40:29937Durchsuche

How to Log 404 Errors in Go's HTTP File Server?

Protokollieren von 404-Fehlern im HTTP-Dateiserver

Bei Verwendung von http.FileServer zum Bereitstellen von Dateien aus einem Verzeichnis ist nicht sofort klar, wie protokolliert werden soll HTTP 404-Fehler (Datei nicht gefunden) auf der Serverkonsole. Während der Browser möglicherweise die Meldung „404-Seite nicht gefunden“ anzeigt, werden diese Informationen nicht automatisch von http.FileServer protokolliert.

Um dieses Problem zu beheben, müssen wir die Funktionalität der von beiden http.StripPrefix zurückgegebenen Handler erweitern und http.FileServer. Wir können dies tun, indem wir sie in benutzerdefinierte Handler oder Handlerfunktionen einschließen und die Wrapper registrieren.

Unsere Wrapper-Implementierung ruft den umschlossenen Handler auf. Nachdem der umschlossene Handler zurückkehrt, kann der Wrapper den Statuscode der HTTP-Antwort überprüfen. Wenn ein Fehler angezeigt wird (insbesondere HTTP 404 Not Found), kann der Wrapper dies entsprechend protokollieren.

http.ResponseWriter unterstützt jedoch nicht das Abrufen des Antwortstatuscodes. Um dies zu umgehen, erstellen wir einen benutzerdefinierten StatusRespWr, der http.ResponseWriter umschließt und den Statuscode für den späteren Abruf speichert.

Hier ist die Implementierung von StatusRespWr:

<code class="go">type StatusRespWr struct {
    http.ResponseWriter // We embed http.ResponseWriter
    status int
}

func (w *StatusRespWr) WriteHeader(status int) {
    w.status = status // Store the status for our own use
    w.ResponseWriter.WriteHeader(status)
}</code>

Als nächstes Wir verpacken den http.Handler:

<code class="go">func wrapHandler(h http.Handler) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        srw := &StatusRespWr{ResponseWriter: w}
        h.ServeHTTP(srw, r)
        if srw.status >= 400 { // 400+ codes are error codes
            log.Printf("Error status code: %d when serving path: %s", srw.status, r.RequestURI)
        }
    }
}</code>

Schließlich erstellen wir in der Hauptfunktion einen Dateiserver, verpacken ihn und registrieren den umhüllten Handler:

<code class="go">http.HandleFunc("/o/", wrapHandler(http.StripPrefix("/o", http.FileServer(http.Dir("/test")))))
panic(http.ListenAndServe(":8181", nil))</code>

Wenn eine Anfrage vorliegt für eine nicht vorhandene Datei erstellt wird, wird die folgende Meldung protokolliert:

2015/12/01 11:47:40 Error status code: 404 when serving path: /o/sub/b.txt2

Das obige ist der detaillierte Inhalt vonWie protokolliere ich 404-Fehler im HTTP-Dateiserver von Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn