This repository has been archived on 2022-05-25. You can view files and clone it, but cannot push or open issues or pull requests.
elon-eats-my-tweets/httpserver/logger.go

33 lines
764 B
Go
Raw Normal View History

2022-05-20 19:52:54 +00:00
package httpserver
import (
"net/http"
"time"
"github.com/go-chi/chi/middleware"
"go.uber.org/zap"
)
func loggerMiddleware(l *zap.Logger) func(next http.Handler) http.Handler {
return func(next http.Handler) http.Handler {
fn := func(w http.ResponseWriter, r *http.Request) {
ww := middleware.NewWrapResponseWriter(w, r.ProtoMajor)
t1 := time.Now()
defer func() {
l.Info("HTTP",
zap.String("proto", r.Proto),
2022-05-20 22:34:20 +00:00
zap.String("method", r.Method),
2022-05-20 19:52:54 +00:00
zap.String("path", r.URL.Path),
zap.Duration("dur", time.Since(t1)),
zap.Int("status", ww.Status()),
zap.Int("size", ww.BytesWritten()),
zap.String("reqId", middleware.GetReqID(r.Context())))
}()
next.ServeHTTP(ww, r)
}
return http.HandlerFunc(fn)
}
}