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

Patricia Arquette
Freigeben: 2024-10-26 20:40:29
Original
946 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!