package middleware import ( "godocms/common" "log/slog" "strings" "time" "github.com/gin-gonic/gin" ) // LoggerMiddleware 是一个简单的日志中间件 func LoggerMiddleware(handler slog.Handler) gin.HandlerFunc { return func(c *gin.Context) { // 获取请求的 Host host := c.Request.Host // 获取请求的 Scheme scheme := "http" if c.Request.TLS != nil { scheme = "https" } common.Config.System.Host = host common.Config.System.Scheme = scheme url := c.Request.URL.Path // 检查 URL 是否以 /static/ 开头,如果是则跳过记录 if strings.HasPrefix(url, "/static/") || strings.HasPrefix(url, "/upload/") { c.Next() // 继续后续处理 return } startTime := time.Now() c.Next() // 执行后续的处理函数 logger := slog.New(handler) // 记录请求的信息 logger.Info("Request completed", slog.String("method", c.Request.Method), slog.String("path", url), slog.Any("status", c.Writer.Status()), slog.Duration("duration", time.Since(startTime)), ) } }