All checks were successful
Build Multi-Platform Binaries / build-frontend (push) Successful in 31s
Build Multi-Platform Binaries / build-binaries (amd64, darwin, server, false) (push) Successful in 1m19s
Build Multi-Platform Binaries / build-binaries (amd64, linux, client, true) (push) Successful in 1m1s
Build Multi-Platform Binaries / build-binaries (amd64, linux, server, true) (push) Successful in 1m57s
Build Multi-Platform Binaries / build-binaries (amd64, windows, client, true) (push) Successful in 1m17s
Build Multi-Platform Binaries / build-binaries (amd64, windows, server, true) (push) Successful in 1m36s
Build Multi-Platform Binaries / build-binaries (arm, 7, linux, client, true) (push) Successful in 1m4s
Build Multi-Platform Binaries / build-binaries (arm, 7, linux, server, true) (push) Successful in 1m44s
Build Multi-Platform Binaries / build-binaries (arm64, darwin, server, false) (push) Successful in 1m37s
Build Multi-Platform Binaries / build-binaries (arm64, linux, client, true) (push) Successful in 58s
Build Multi-Platform Binaries / build-binaries (arm64, linux, server, true) (push) Successful in 1m32s
Build Multi-Platform Binaries / build-binaries (arm64, windows, server, false) (push) Successful in 1m7s
59 lines
1.1 KiB
Go
59 lines
1.1 KiB
Go
package middleware
|
|
|
|
import (
|
|
"log"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
// 静态资源扩展名
|
|
var staticExtensions = []string{
|
|
".js", ".css", ".png", ".jpg", ".jpeg", ".gif", ".svg", ".ico",
|
|
".woff", ".woff2", ".ttf", ".eot", ".map", ".json", ".html",
|
|
}
|
|
|
|
// isStaticRequest 检查是否是静态资源请求
|
|
func isStaticRequest(path string) bool {
|
|
// 检查 /assets/ 路径
|
|
if strings.HasPrefix(path, "/assets/") {
|
|
return true
|
|
}
|
|
// 检查文件扩展名
|
|
for _, ext := range staticExtensions {
|
|
if strings.HasSuffix(path, ext) {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
// Logger 请求日志中间件
|
|
func Logger() gin.HandlerFunc {
|
|
return func(c *gin.Context) {
|
|
start := time.Now()
|
|
path := c.Request.URL.Path
|
|
query := c.Request.URL.RawQuery
|
|
method := c.Request.Method
|
|
|
|
c.Next()
|
|
|
|
// 跳过静态资源请求的日志
|
|
if isStaticRequest(path) {
|
|
return
|
|
}
|
|
|
|
latency := time.Since(start)
|
|
status := c.Writer.Status()
|
|
clientIP := c.ClientIP()
|
|
|
|
if query != "" {
|
|
path = path + "?" + query
|
|
}
|
|
|
|
log.Printf("[API] %s %s %d %v %s",
|
|
method, path, status, latency, clientIP)
|
|
}
|
|
}
|