Apabila menyampaikan fail statik menggunakan http.FileServer, selalunya penting untuk log apabila permintaan dibuat untuk fail yang tidak wujud. Walaupun http.FileServer sendiri tidak menyediakan pengelogan sedemikian, memperluaskan fungsinya membolehkan anda mencapai matlamat ini.
Untuk membalut pengendali yang dikembalikan oleh http.StripPrefix dan http.FileServer, cipta http.Handler atau http baharu. HandlerFunc. Pembalut akan memanggil pengendali yang dibalut dan memeriksa kod status respons HTTP yang terhasil. Jika ia menunjukkan ralat (khususnya HTTP 404 Not Found), ia boleh log peristiwa itu.
Memandangkan http.ResponseWriter tidak menyokong membaca kod status respons, buat pembungkus untuknya (StatusRespWr). Pembungkus ini akan menyimpan kod status apabila ia ditulis.
Kod untuk pembungkus http.Handler kelihatan seperti ini:
<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>
Fungsi utama boleh mencipta pelayan fail, bungkusnya , dan daftarkannya:
<code class="go">http.HandleFunc("/o/", wrapHandler( http.StripPrefix("/o", http.FileServer(http.Dir("/test"))))) panic(http.ListenAndServe(":8181", nil))</code>
Apabila meminta fail yang tidak wujud, output berikut akan dijana dalam 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 apabila menggunakan `http.FileServer` untuk menyampaikan fail statik dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!