mirror of https://gitee.com/godoos/godoos.git
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
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)),
|
|
)
|
|
}
|
|
}
|
|
|