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

Patricia Arquette
Lepaskan: 2024-10-26 19:39:29
asal
760 orang telah melayarinya

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

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

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

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

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!

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!