From 8a43f4406a5182e10e62614d00f0be86eb2d4d72 Mon Sep 17 00:00:00 2001 From: hhs <386998068@qq.com> Date: Sun, 21 Jun 2026 22:16:38 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E9=99=90=E6=B5=81?= =?UTF-8?q?=E8=A7=A6=E5=8F=91=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/internal/ratelimit/middleware.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/backend/internal/ratelimit/middleware.go b/backend/internal/ratelimit/middleware.go index dceeee5..fe8708a 100644 --- a/backend/internal/ratelimit/middleware.go +++ b/backend/internal/ratelimit/middleware.go @@ -5,6 +5,8 @@ import ( "net/http" "github.com/gin-gonic/gin" + + "github.com/hhs/camtalk/internal/trace" ) // Middleware 返回 Gin 中间件,按 key 维度限流。 @@ -26,6 +28,13 @@ func Middleware(limiter Limiter, keyFunc func(*gin.Context) string) gin.HandlerF allowed, retryAfter := limiter.Allow(c.Request.Context(), key) if !allowed { + log := trace.FromContext(c.Request.Context()) + log.Warnw("rate limited", + "client_ip", c.ClientIP(), + "path", c.Request.URL.Path, + "limit_key", key, + "retry_after_sec", int(retryAfter.Seconds()+0.5)) + // 设置 Retry-After header(秒) c.Header("Retry-After", fmt.Sprintf("%d", int(retryAfter.Seconds()+0.5)))