首页  >  文章  >  后端开发  >  使用 HTTP 文件服务器时如何记录 404 错误?

使用 HTTP 文件服务器时如何记录 404 错误?

Barbara Streisand
Barbara Streisand原创
2024-10-27 03:12:30745浏览

How to Log 404 Errors When Using HTTP File Server?

使用 HTTP 文件服务器记录丢失文件的 404 状态

使用 http.FileServer 提供文件时,对不存在文件的请求可能会返回未登录到服务器控制台的 404 状态代码。这使得跟踪和排除丢失文件的问题变得困难。

解决方案

要记录 HTTP 404 错误,请增强 http.StripPrefix() 返回的处理程序的功能和 http.FileServer():

  1. 将原始处理程序包装在自定义处理程序或处理程序函数中。
  2. 在包装 http.ResponseWriter 的新 StatusRespWr 结构中重写 WriteHeader() 方法。这使我们能够捕获 HTTP 状态代码。

包装的处理程序将调用原始处理程序并在收到响应后记录 HTTP 404 或更高的错误代码。下面的示例代码演示了完整的实现:

<code class="go">type StatusRespWr struct {
    http.ResponseWriter
    status int
}

func (w *StatusRespWr) WriteHeader(status int) {
    w.status = status
    w.ResponseWriter.WriteHeader(status)
}

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 {
            log.Printf("Error status code: %d when serving path: %s", srw.status, r.RequestURI)
        }
    }
}

func main() {
    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

以上是使用 HTTP 文件服务器时如何记录 404 错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn