Files
filestoragesystem/go/internal/middleware/logger.go
T
2026-08-23 00:48:10 +08:00

61 lines
1.2 KiB
Go

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...)
}
}
}