gpt4 book ai didi

http - 转到 : add logging to each router

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

Go : 为每个路由器添加日志记录

我想在 Go 网络应用程序中记录我所有的网络请求。

像 negroni 的东西:

// https://github.com/codegangsta/negroni/blob/master/logger.go
// NewLogger returns a new Logger instance
func NewLogger() *Logger {
return &Logger{log.New(os.Stdout, "[negroni] ", 0)}
}

func (l *Logger) ServeHTTP(rw http.ResponseWriter, r *http.Request, next http.HandlerFunc) {
start := time.Now()
l.Printf("Started %s %s", r.Method, r.URL.Path)

next(rw, r)

res := rw.(ResponseWriter)
l.Printf("Completed %v %s in %v", res.Status(), http.StatusText(res.Status()), time.Since(start))
}

这是我的代码:

router := httprouter.New()

handler := func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
type Page struct {
Title string
}
tp := template.Must(template.ParseFiles("templates/main.html", "templates/base.html"))
err := tp.ExecuteTemplate(w, "base", &Page{Title: "AAA"})
if err != nil {
log.Fatal(err)
}

router.Handle("GET", "/", handler)

l := log.New(os.Stdout, "[AAA] ", 0)
l.Printf("Listening 0.0.0.0%s", PORT)

l.Fatal(http.ListenAndServe(PORT, router))

如果我想这样做,我必须在我的代码中手动添加 start := time.Now()time.Since(start) 到每个路由器.package 主

我想我应该包装它并使用接口(interface),但不知道如何开始。

如何实现一个简单的日志记录接口(interface)并应用所有路由处理程序,以便我可以使用所有日志记录进行调试...

内格罗尼确实喜欢:

router := mux.NewRouter()
router.HandleFunc("/", HomeHandler)

n := negroni.New(Middleware1, Middleware2)
// Or use a middleware with the Use() function
n.Use(Middleware3)
// router goes last
n.UseHandler(router)

n.Run(":3000")

最佳答案

用记录并委托(delegate)给另一个处理程序的处理程序包装根处理程序:

 type RequestLogger struct {
h http.Handler
l *Logger
}

func (rl RequestLogger) ServeHTTP(w http.ResponseWriter, r *http.Request) {
start := time.Now()
rl.l.Printf("Started %s %s", r.Method, r.URL.Path)
rl.h.ServeHTTP(w, r)
rl.l.Printf("Completed %s %s in %v", r.Method, r.URL.Path, time.Since(start))
}

---

l := log.New(os.Stdout, "[AAA] ", 0)
l.Printf("Listening 0.0.0.0%s", PORT)
l.Fatal(http.ListenAndServe(PORT, RequestLogger{h:router, l:l}))

关于http - 转到 : add logging to each router,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26184465/

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