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

Patricia Arquette
Release: 2024-10-26 20:40:29
Original
946 people have browsed it

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

Logging 404 Errors in HTTP File Server

When using http.FileServer to serve files from a directory, it's not immediately clear how to log HTTP 404 errors (file not found) on the server console. While the browser may display a "404 page not found" message, this information is not automatically logged by http.FileServer.

To address this, we need to extend the functionality of the handlers returned by both http.StripPrefix and http.FileServer. We can do this by wrapping them in custom handlers or handler functions and registering the wrappers.

Our wrapper implementation will invoke the wrapped handler. After the wrapped handler returns, the wrapper can inspect the HTTP response status code. If it indicates an error (specifically HTTP 404 Not Found), the wrapper can log this appropriately.

However, http.ResponseWriter does not support retrieving the response status code. To overcome this, we'll create a custom StatusRespWr that wraps http.ResponseWriter and stores the status code for later retrieval.

Here's the implementation of 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>
Copy after login

Next, we'll wrap the 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>
Copy after login

Finally, in the main function, we create a file server, wrap it, and register the wrapped handler:

<code class="go">http.HandleFunc("/o/", wrapHandler(http.StripPrefix("/o", http.FileServer(http.Dir("/test")))))
panic(http.ListenAndServe(":8181", nil))</code>
Copy after login

If a request is made for a non-existent file, the following message will be logged:

2015/12/01 11:47:40 Error status code: 404 when serving path: /o/sub/b.txt2
Copy after login

The above is the detailed content of How to Log 404 Errors in Go\'s HTTP File Server?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!