50 lines
1.1 KiB
Go
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 ""
|
|
}
|