Home  >  Article  >  Backend Development  >  Golang custom ServeHTTP status logging

Golang custom ServeHTTP status logging

WBOY
WBOYforward
2024-02-11 12:54:081212browse

Golang 自定义 ServeHTTP 状态日志记录

php editor Banana introduces Golang custom ServeHTTP status logging to you. In Golang, the ServeHTTP function is one of the key functions used to handle HTTP requests. By customizing the ServeHTTP function, we can record and track the status information of each request to better understand and debug our application. This article will introduce in detail how to customize the ServeHTTP function in Golang and implement the status logging function to improve our development efficiency and application stability. Whether you are a beginner or an experienced developer, this article will help you better understand and apply Golang's ServeHTTP function.

Question content

I'm building my own web framework and I'm running into a problem, when I try to log a request with a response status code I get the error: Invalid memory address or zero pointer dereference p>

My ServeHTTP function:

func (r *Router) ServeHTTP(w http.ResponseWriter, req *http.Request) {

    handler := r.getHandler(req.Method, req.URL.Path)
    if handler == nil {
        notFoundHandler(w, req)
        return
    }
    done := make(chan struct{})

    reqStruct := newReqStruct(w, req)

    go func() {
        handler(reqStruct)
        done <- struct{}{}
        close(done)
    }()
    <-done
    logger.logRequest(req.URL.Path, req.Method, req.Response.StatusCode)

}

Solution

This line:

logger.logRequest(req.URL.Path, req.Method, req.Response.StatusCode)

req.Response will only be populated for HTTP redirects. In this case it will be zero.

If you want to capture the response code, write a wrapper response writer and implement WriteHeader to capture the response code.

The above is the detailed content of Golang custom ServeHTTP status logging. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete