Files
junk2jive-server/internal/logger/request.go
rogueking 84e150cb11
Some checks failed
Build and Push Docker Image / Build and push image (push) Failing after 43s
Run Go Tests / build (push) Failing after 0s
golangci-lint / lint (push) Failing after 2m0s
added workflows and fixed router
2025-05-06 14:49:14 -07:00

44 lines
1.1 KiB
Go

package logger
import (
"net/http"
"time"
"github.com/go-chi/chi/v5/middleware"
"go.uber.org/zap"
"gitea.miguelmuniz.com/rogueking/junk2jive-server/internal/response"
)
func Middleware(logger *zap.Logger) func(http.Handler) http.Handler {
return func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
start := time.Now()
ww := middleware.NewWrapResponseWriter(w, r.ProtoMajor)
next.ServeHTTP(ww, r)
logFields := []zap.Field{
zap.String("method", r.Method),
zap.String("path", r.URL.Path),
zap.String("query", r.URL.RawQuery),
zap.Int("status", ww.Status()),
zap.String("ip", r.RemoteAddr),
zap.String("user-agent", r.UserAgent()),
zap.Duration("latency", time.Since(start)),
zap.String("time", time.Now().Format(time.RFC3339)),
}
if err := response.GetError(r); err != nil {
logFields = append(logFields, zap.Error(err))
}
if ww.Status() >= http.StatusBadRequest && ww.Status() != http.StatusTeapot {
logger.Error("Request failed", logFields...)
} else {
logger.Info("Request", logFields...)
}
})
}
}