package middleware import ( "time" "github.com/gin-gonic/gin" "go.uber.org/zap" ) // Logging 日志中间件 func Logging(logger *zap.Logger) gin.HandlerFunc { return func(c *gin.Context) { start := time.Now() path := c.Request.URL.Path query := c.Request.URL.RawQuery requestID, _ := c.Get(RequestIDKey) logger.Info("请求开始", zap.String("method", c.Request.Method), zap.String("path", path), zap.String("query", query), zap.String("client_ip", c.ClientIP()), zap.Any("request_id", requestID), ) c.Next() latency := time.Since(start) statusCode := c.Writer.Status() logger.Info("请求结束", zap.Int("status", statusCode), zap.String("method", c.Request.Method), zap.String("path", path), zap.Duration("latency", latency), zap.Int("body_size", c.Writer.Size()), zap.Any("request_id", requestID), ) } }