You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

41 lines
1.0 KiB

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