首頁 > 後端開發 > Golang > 主體

如何在 Go 的 HTTP 檔案伺服器中記錄 404 錯誤?

Patricia Arquette
發布: 2024-10-26 20:40:29
原創
946 人瀏覽過

How to Log 404 Errors in Go's HTTP File Server?

在HTTP 檔案伺服器中記錄404 錯誤

使用http.FileServer 提供目錄中的檔案時,無法立即清楚如何記錄伺服器控制台上出現HTTP 404 錯誤(找不到檔案)。雖然瀏覽器可能會顯示「404 頁面找不到」訊息,但 http.FileServer 不會自動記錄此資訊。

為了解決此問題,我們需要擴充 http.StripPrefix 傳回的處理程序的功能和 http.FileServer。我們可以透過將它們包裝在自訂處理程序或處理程序函數中並註冊包裝器來做到這一點。

我們的包裝器實作將呼叫包裝的處理程序。包裝處理程序傳回後,包裝器可以檢查 HTTP 回應狀態碼。如果它指示錯誤(特別是 HTTP 404 Not Found),則包裝器可以適當地記錄此錯誤。

但是,http.ResponseWriter 不支援檢索回應狀態碼。為了克服這個問題,我們將建立一個自訂 StatusRespWr 來包裝 http.ResponseWriter 並儲存狀態碼以供以後檢索。

這是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>
登入後複製

接下來,我們' ll 包裝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>
登入後複製

最後,在main 函數中,我們建立一個文件伺服器,包裝它,並註冊包裝的處理程序:

<code class="go">http.HandleFunc("/o/", wrapHandler(http.StripPrefix("/o", http.FileServer(http.Dir("/test")))))
panic(http.ListenAndServe(":8181", nil))</code>
登入後複製

如果請求是為不存在的文件創建的,將記錄以下訊息:

2015/12/01 11:47:40 Error status code: 404 when serving path: /o/sub/b.txt2
登入後複製

以上是如何在 Go 的 HTTP 檔案伺服器中記錄 404 錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!