Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Log Ralat 404 dalam Pelayan Fail HTTP Go?

Bagaimana untuk Log Ralat 404 dalam Pelayan Fail HTTP Go?

Patricia Arquette
Patricia Arquetteasal
2024-10-26 20:40:29937semak imbas

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

Melog 404 Ralat dalam Pelayan Fail HTTP

Apabila menggunakan http.FileServer untuk menyampaikan fail dari direktori, cara untuk log tidak jelas dengan serta-merta Ralat HTTP 404 (fail tidak ditemui) pada konsol pelayan. Walaupun penyemak imbas mungkin memaparkan mesej "halaman 404 tidak ditemui", maklumat ini tidak dilog secara automatik oleh http.FileServer.

Untuk menangani perkara ini, kami perlu memperluaskan fungsi pengendali yang dikembalikan oleh kedua-dua http.StripPrefix dan http.FileServer. Kita boleh melakukannya dengan membungkusnya dalam fungsi pengendali atau pengendali tersuai dan mendaftarkan pembalut.

Pelaksanaan pembalut kami akan menggunakan pengendali yang dibalut. Selepas pengendali yang dibalut kembali, pembalut boleh memeriksa kod status respons HTTP. Jika ia menunjukkan ralat (khususnya HTTP 404 Not Found), pembungkus boleh log ini dengan sewajarnya.

Walau bagaimanapun, http.ResponseWriter tidak menyokong mendapatkan semula kod status respons. Untuk mengatasinya, kami akan mencipta StatusRespWr tersuai yang membungkus http.ResponseWriter dan menyimpan kod status untuk mendapatkan semula kemudian.

Berikut ialah pelaksanaan 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>

Seterusnya, kami' akan membalut 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>

Akhir sekali, dalam fungsi utama, kami mencipta pelayan fail, membungkusnya dan mendaftarkan pengendali yang dibalut:

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

Jika permintaan dibuat untuk fail yang tidak wujud, mesej berikut akan dilog:

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

Atas ialah kandungan terperinci Bagaimana untuk Log Ralat 404 dalam Pelayan Fail HTTP Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn