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/middleware.go

38 lines
994 B
Go

package httpserver
import (
"net/http"
"time"
"github.com/go-chi/chi/middleware"
"github.com/gorilla/sessions"
"go.uber.org/zap"
)
func loggerMiddleware(l *zap.Logger, sessionStore sessions.Store) 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()
cu, _ := getCurrentUser(r, sessionStore)
defer func() {
l.Info("HTTP",
zap.String("proto", r.Proto),
zap.String("method", r.Method),
zap.String("path", r.URL.Path),
zap.Duration("dur", time.Since(t1)),
zap.Int("status", ww.Status()),
zap.Int("size", ww.BytesWritten()),
zap.String("ip", r.RemoteAddr),
zap.String("reqId", middleware.GetReqID(r.Context())),
zap.Int64("userID", cu.TwitterID),
zap.String("username", cu.TwitterUsername))
}()
next.ServeHTTP(ww, r)
}
return http.HandlerFunc(fn)
}
}