package middleware import ( "time" "github.com/gin-gonic/gin" "go.uber.org/zap" ) // Logger 请求日志中间件,记录每个请求的方法、路径、状态码、耗时 // 在 c.Next() 前后分别记录开始和结束时间 func Logger(logger *zap.Logger) gin.HandlerFunc { return func(c *gin.Context) { start := time.Now() path := c.Request.URL.Path query := c.Request.URL.RawQuery c.Next() // 执行后续中间件和 Handler cost := time.Since(start) logger.Info("HTTP Request", zap.Int("status", c.Writer.Status()), zap.String("method", c.Request.Method), zap.String("path", path), zap.String("query", query), zap.String("ip", c.ClientIP()), zap.Duration("cost", cost), zap.String("errors", c.Errors.ByType(gin.ErrorTypePrivate).String()), ) } }