gpt4 book ai didi

go - 如何在 golang 中记录 http 服务器错误?

转载 作者:IT王子 更新时间:2023-10-29 01:25:28 26 4
gpt4 key购买 nike

我正在 try catch 并记录 url 参数未正确编码时发生的 http 错误 400。

我的服务器实现如下:

router := http.NewServeMux()
router.HandleFunc("/", requestHandler)

s := &http.Server{
Addr: ":8080",
Handler: router,
ErrorLog: myLogger,
}
log.Fatal(s.ListenAndServe())

请求永远不会到达 requestHandler,并且 ErrorLog: myLogger 没有任何区别。

最佳答案

您需要围绕记录 StatusCode 的 requestHandler 创建自定义 Wrapper并在处理完 requestCall 后对其进行检查。

注意我们如何包装主路由器本身。使用 WrapHandler(router)

package main

import (
"log"
"net/http"
)

type LogRecord struct {
http.ResponseWriter
status int
}

func (r *LogRecord) Write(p []byte) (int, error) {
return r.ResponseWriter.Write(p)
}

func (r *LogRecord) WriteHeader(status int) {
r.status = status
r.ResponseWriter.WriteHeader(status)
}

func WrapHandler(f http.Handler) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
record := &LogRecord{
ResponseWriter: w,
}

f.ServeHTTP(record, r)

log.Println("Bad Request ", record.status)

if record.status == http.StatusBadRequest {
log.Println("Bad Request ", r)
}
}
}

func main() {
router := http.NewServeMux()

s := &http.Server{
Addr: ":8080",
Handler: WrapHandler(router),
}
log.Fatal(s.ListenAndServe())
}

关于go - 如何在 golang 中记录 http 服务器错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25456390/

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