package middleware import ( "time" "github.com/gin-gonic/gin" "filestoragesystem/internal/utils" ) // RequestID 请求ID中间件 func RequestID() gin.HandlerFunc { return func(c *gin.Context) { id := c.GetHeader("X-Request-Id") if id == "" { id = utils.RandomKey(8) } c.Set("requestID", id) c.Header("X-Request-Id", id) c.Next() } } // Logger 访问日志中间件 func Logger() gin.HandlerFunc { return func(c *gin.Context) { start := time.Now() path := c.Request.URL.Path c.Next() latency := time.Since(start) status := c.Writer.Status() args := []interface{}{ "status", status, "method", c.Request.Method, "path", path, "ip", utils.ClientIP(c), "latency", latency.String(), "request_id", c.GetString("requestID"), } if uid := CurrentUserID(c); uid > 0 { args = append(args, "user_id", uid) } if err := c.Errors.ByType(gin.ErrorTypePrivate).Last(); err != nil { args = append(args, "error", err.Error()) } sugar := utils.Logger().Sugar() switch { case status >= 500: sugar.Errorw("access", args...) case status >= 400: sugar.Warnw("access", args...) default: sugar.Infow("access", args...) } } }