gpt4 book ai didi

Go HTTP ListenAndServe 记录响应

转载 作者:IT王子 更新时间:2023-10-29 00:42:07 25 4
gpt4 key购买 nike

我想知道在使用 ListenAndServe 时是否有办法记录响应。

据我所知,处理程序无权访问“响应”对象。只是一个 ResponseWriter,所以我不能调用 httputil.DumpResponse。

最佳答案

http.ResponseWriter 是一个接口(interface)。您可以使用嵌入来扩展它以进行日志记录,如下所示。

package main
import (
"log"
"net/http"
)

func sampleHandler(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
response := []byte("Sample Response")
w.Write(response)
}

type loggingResponseWriter struct {
status int
body string
http.ResponseWriter
}

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

func (w *loggingResponseWriter) Write(body []byte) (int, error) {
w.body = string(body)
return w.ResponseWriter.Write(body)
}

func responseLogger(h http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
loggingRW := &loggingResponseWriter{
ResponseWriter: w,
}
h.ServeHTTP(loggingRW, r)
log.Println("Status : ", loggingRW.status, "Response : ", loggingRW.body)
})
}

func main() {
http.Handle("/", responseLogger(http.HandlerFunc(sampleHandler)))
http.ListenAndServe(":8080", nil)
}

您可以使用 responseLogger 包装要记录响应的处理函数。

关于Go HTTP ListenAndServe 记录响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36706033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com