Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah saya boleh log 404 ralat semasa menyampaikan fail dengan `http.FileServer` dalam Go?

Bagaimanakah saya boleh log 404 ralat semasa menyampaikan fail dengan `http.FileServer` dalam Go?

Patricia Arquette
Patricia Arquetteasal
2024-10-26 19:39:29746semak imbas

How can I log 404 errors when serving files with `http.FileServer` in Go?

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!

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