package middleware import ( "github.com/gin-gonic/gin" "go.uber.org/zap" ) // Logger middleware for structured logging func Logger(logger *zap.Logger) gin.HandlerFunc { return gin.LoggerWithFormatter(func(param gin.LogFormatterParams) string { logger.Info("HTTP request", zap.String("method", param.Method), zap.String("path", param.Path), zap.Int("status", param.StatusCode), zap.Duration("latency", param.Latency), zap.String("client_ip", param.ClientIP), zap.String("user_agent", param.Request.UserAgent()), ) return "" }) } // Recovery middleware with structured logging func Recovery(logger *zap.Logger) gin.HandlerFunc { return gin.RecoveryWithWriter(gin.DefaultWriter, func(c *gin.Context, recovered interface{}) { logger.Error("Panic recovered", zap.Any("error", recovered), zap.String("method", c.Request.Method), zap.String("path", c.Request.URL.Path), zap.String("client_ip", c.ClientIP()), ) c.AbortWithStatus(500) }) }