GoTest/internal/middleware/logger.go
2025-11-29 03:27:19 +08:00

50 lines
1.1 KiB
Go

package middleware
import (
"fmt"
"time"
"github.com/gin-gonic/gin"
)
// LoggerMiddleware 自定义日志中间件
func LoggerMiddleware() gin.HandlerFunc {
return gin.LoggerWithFormatter(func(param gin.LogFormatterParams) string {
return fmt.Sprintf("[%s] %s %s %s %d %s %s\n",
param.TimeStamp.Format("2006-01-02 15:04:05"),
param.ClientIP,
param.Method,
param.Path,
param.StatusCode,
param.Latency,
param.ErrorMessage,
)
})
}
// RequestIDMiddleware 请求ID中间件
func RequestIDMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
requestID := c.GetHeader("X-Request-ID")
if requestID == "" {
requestID = generateRequestID()
}
c.Set("request_id", requestID)
c.Header("X-Request-ID", requestID)
c.Next()
}
}
// generateRequestID 生成请求ID
func generateRequestID() string {
return fmt.Sprintf("%d", time.Now().UnixNano())
}
// GetRequestID 从上下文中获取请求ID
func GetRequestID(c *gin.Context) string {
if requestID, exists := c.Get("request_id"); exists {
return requestID.(string)
}
return ""
}