package middleware import ( "time" "github.com/gin-gonic/gin" "go.uber.org/zap" "streambox/pkg/logger" ) func ZapLogger() gin.HandlerFunc { return func(c *gin.Context) { start := time.Now() path := c.Request.URL.Path query := c.Request.URL.RawQuery c.Next() latency := time.Since(start) if logger.Log != nil { fields := []zap.Field{ zap.String("method", c.Request.Method), zap.String("path", path), zap.String("query", query), zap.Int("status", c.Writer.Status()), zap.Duration("latency", latency), zap.String("ip", c.ClientIP()), zap.String("user-agent", c.Request.UserAgent()), } if len(c.Errors) > 0 { fields = append(fields, zap.String("errors", c.Errors.String())) } logger.Log.Info("request", fields...) } } }