Laravel队列配置spatie限流中间件后提示无速率限制,如何关闭相关日志
问题原因
这条日志由spatie/laravel-rate-limited-job-middleware包生成,触发原因是你配置限流规则时没有指定唯一的限流标识,中间件默认会用任务所属队列名称作为限流维度的一部分,当中间件无法匹配到对应队列的限流规则时,就会输出该提示。
修复报错方案
提供两种可选修复方式:
- 指定全局唯一限流标识(最通用,不依赖队列配置)
在RateLimited实例化后调用by方法传入自定义的唯一字符串即可,修改后的middleware方法代码如下:
public function middleware() { $rateLimitedMiddleware = (new RateLimited()) ->allow(50) ->everySeconds(10) ->releaseAfterSeconds(5) ->by('weekly_survey_email_job'); // 自定义唯一限流标识 return [$rateLimitedMiddleware]; }
- 按队列维度限流
如果你的邮件任务固定分发到指定队列(比如email队列),添加onQueue方法指定队列名即可匹配规则:
->onQueue('email')
关闭限流相关日志的方法
两种可选方案:
- 方案1:修改包配置关闭所有该包的日志
先运行命令发布包配置文件:php artisan vendor:publish --provider="Spatie\RateLimitedMiddleware\RateLimitedMiddlewareServiceProvider"
打开生成的config/rate-limited-middleware.php文件,将log_enabled参数值改为false即可关闭该包所有日志输出。 - 方案2:仅过滤特定报错日志
如果你不想关闭所有限流日志,只需要屏蔽「No rate limit is set for queue」这一条,可以在config/logging.php对应日志通道的配置中,添加monolog过滤规则,匹配该字符串的日志直接丢弃即可。
内容的提问来源于stack exchange,提问作者Toksti Dats Ready
相关产品推荐
相关产品推荐

