Bagaimana untuk Log Ralat 404 dalam Pelayan Fail HTTP Go?

Patricia Arquette
Lepaskan: 2024-10-26 20:40:29
asal
946 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!