// Package middleware Gin 中间件层,提供请求日志、认证等横切能力 package middleware import ( "time" "resume-platform/pkg/logger" "github.com/gin-gonic/gin" ) func RequestLogger() gin.HandlerFunc { return func(c *gin.Context) { start := time.Now() path := c.Request.URL.Path method := c.Request.Method c.Next() latency := time.Since(start) statusCode := c.Writer.Status() clientIP := c.ClientIP() referer := c.Request.Referer() userAgent := c.Request.UserAgent() entry := logger.FromContext(c.Request.Context()) entry = entry.WithFields(map[string]interface{}{ "status": statusCode, "latency": latency, "ip": clientIP, "method": method, "path": path, }) if referer != "" { entry = entry.WithField("referer", referer) } if len(c.Errors) > 0 { entry = entry.WithField("errors", c.Errors.String()) } switch { case statusCode >= 500: entry.WithField("user_agent", userAgent).Error("Server error") case statusCode >= 400: entry.Warn("Client error") default: entry.Info("Request handled") } } }