Laravel Sail(WSL2环境)无请求时日志持续堆积问题求助
Laravel Sail(WSL2)日志疯狂填满的排查与解决
紧急止损:阻止日志爆炸
先临时修改代码,避免每次应用启动都生成大量错误日志:
打开app/Providers/AppServiceProvider.php,找到boot方法中调用Model::all()的代码(对应错误栈第31行的分类表查询),添加异常捕获:
public function boot() { try { // 替换成你实际调用的模型,比如 Category::all() $categories = \App\Models\Category::all(); // 后续使用数据的逻辑 } catch (\Exception $e) { // 仅记录轻量警告,避免日志暴涨 \Illuminate\Support\Facades\Log::warning('加载分类数据失败:'.$e->getMessage()); } }
也可以暂时注释这段代码,先让日志恢复正常。
根本原因分析
从错误栈能明确:
- 错误是数据库连接失败(SQLSTATE[HY000] [2002] No such file or directory),触发点在
AppServiceProvider的boot方法中 boot方法在Laravel应用启动时必执行,不管是WEB请求还是CLI命令- 正常访问时无问题,说明WEB环境数据库连接正常,问题出在CLI环境(定时任务、队列Worker、后台脚本)反复启动Laravel,但连接数据库失败,每次启动都写入错误日志
排查与修复步骤
1. 检查定时任务(Cron)
查看当前定时任务列表,确认是否有异常任务:
sail artisan schedule:list
同时查看容器的Cron日志,看是否有任务反复执行并报错:
sail logs -f laravel.test | grep cron
如果发现异常任务,修正对应定时任务逻辑。
2. 检查队列Worker状态
如果使用了队列,检查Worker是否频繁重启:
sail queue:work --status
或者查看队列相关日志:
sail logs -f laravel.test | grep queue
若Worker反复崩溃,排查队列任务代码问题,或验证队列环境的数据库配置是否异常。
3. 验证CLI环境的数据库连接
进入Sail容器,测试CLI模式下的数据库连接:
sail exec laravel.test bash php artisan tinker >>> \App\Models\Category::all();
如果执行报错,说明CLI环境数据库配置有问题:
- 检查
.env的DB_HOST:Sail环境下需设置为容器名(如mysql),而非127.0.0.1 - 检查
DB_SOCKET:若用socket连接,确认路径对应mysql容器内的默认路径/var/run/mysqld/mysqld.sock
4. 排查后台异常进程
进入容器查看是否有反复启动的PHP进程:
sail exec laravel.test bash ps aux | grep php
如果发现异常进程,排查是否有自定义脚本或监控工具在频繁调用Laravel命令。
内容的提问来源于stack exchange,提问作者yossi
相关产品推荐
相关产品推荐

