package middleware import ( "time" "github.com/gin-gonic/gin" "github.com/niangaodev/art-code/models" "github.com/niangaodev/art-code/repositories" "github.com/niangaodev/art-code/utils" ) // AccessLogMiddleware 访问日志中间件 (用于流量统计) func AccessLogMiddleware() gin.HandlerFunc { return func(c *gin.Context) { start := time.Now() c.Next() // 过滤静态资源和API调用 // 这里只记录主要页面访问,或者我们可以记录所有非静态资源 // 简化起见,记录所有请求,分析时再过滤 // 获取IP ip := c.ClientIP() // 获取归属地 (需要先初始化ip2region) region := utils.GetRegion(ip) log := &models.AccessLog{ IP: ip, UserAgent: c.Request.UserAgent(), Path: c.Request.URL.Path, Method: c.Request.Method, StatusCode: c.Writer.Status(), ResponseTime: time.Since(start).Milliseconds(), Region: region, } // 异步入库 go func() { repositories.CreateAccessLog(log) }() } }