diff --git a/cmd/api.go b/cmd/api.go index e417b38..4254e7e 100644 --- a/cmd/api.go +++ b/cmd/api.go @@ -48,7 +48,7 @@ func RunApi(cmd *cobra.Command, args []string) { defer stop() r := gin.New() - r.Use(gin.Logger()) + r.Use(middleware.Logger()) r.Use(gin.Recovery()) // Add Swagger route diff --git a/internal/middleware/logger.go b/internal/middleware/logger.go new file mode 100644 index 0000000..ad7e0cb --- /dev/null +++ b/internal/middleware/logger.go @@ -0,0 +1,50 @@ +package middleware + +import ( + "time" + + "github.com/gin-gonic/gin" + "github.com/rs/zerolog/log" +) + +// Logger returns a gin.HandlerFunc (middleware) that logs requests using zerolog. +func Logger() gin.HandlerFunc { + return func(c *gin.Context) { + // Start timer + start := time.Now() + path := c.Request.URL.Path + raw := c.Request.URL.RawQuery + + // Process request + c.Next() + + // Stop timer + end := time.Now() + latency := end.Sub(start) + + // Get status code + statusCode := c.Writer.Status() + + // Get client IP + clientIP := c.ClientIP() + + // Get method + method := c.Request.Method + + // Get error message if any + var errorMessage string + if len(c.Errors) > 0 { + errorMessage = c.Errors.String() + } + + log.Debug(). + Str("path", path). + Str("raw", raw). + Int("status", statusCode). + Str("method", method). + Str("ip", clientIP). + Dur("latency", latency). + Str("error", errorMessage). + Msg("incoming request") + } +}