Melog 404 Ralat untuk Http.FileServer
Apabila menyiarkan fail dengan http.FileServer, adalah berguna untuk log kejadian di mana fail yang diminta tidak wujud, menghasilkan kod status 404. Walau bagaimanapun, pengendali http.FileServer lalai tidak menyediakan kefungsian ini.
Melanjutkan Fungsi
Untuk log 404 ralat, anda boleh melanjutkan kefungsian http.FileServer pengendali. Ini boleh dicapai dengan membalut pengendali dengan http.Handler atau http.HandlerFunc tersuai.
Membalut Pengendali
Pengendali pembalut akan menggunakan http.FileServer asal pengendali dan kemudian periksa kod status respons HTTP. Jika ia adalah ralat (khususnya 404 Not Found), ia boleh log ralat dengan sewajarnya.
Pembungkus Kod Status Respons
Sebagai http.ResponseWriter tidak menyokong membaca kod status respons secara langsung, anda boleh membuat pembungkus yang menyimpan kod status apabila ia ditetapkan.
<code class="go">type StatusRespWr struct { http.ResponseWriter // Embeds http.ResponseWriter status int } func (w *StatusRespWr) WriteHeader(status int) { w.status = status // Store the status for later use w.ResponseWriter.WriteHeader(status) }</code>
Pembungkus Pengendali
Dengan pembungkus kod status respons dalam tempat, anda boleh mencipta pembungkus pengendali yang mencatat ralat:
<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 indicate errors log.Printf("Error status code: %d when serving path: %s", srw.status, r.RequestURI) } } }</code>
Mendaftarkan Pengendali yang Dibalut
Akhir sekali, anda boleh mendaftarkan pengendali yang dibalut sebagai laluan dalam anda Pelayan HTTP:
<code class="go">http.HandleFunc("/o/", wrapHandler(http.FileServer(http.Dir("/test"))))</code>
Contoh Output
Apabila fail yang tidak wujud diminta, pengendali yang dibalut akan log mesej ralat ke konsol:
2015/12/01 11:47:40 Error status code: 404 when serving path: /o/sub/b.txt2
Atas ialah kandungan terperinci Bagaimanakah saya boleh log 404 ralat semasa menyampaikan fail dengan `http.FileServer` dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!