Files

52 lines
1.1 KiB
Go

// 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")
}
}
}