You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

排查WSL2环境下Laravel 8项目日志莫名被重复填充的问题

排查WSL2环境下Laravel 8项目日志莫名被重复填充的问题

看起来你遇到了挺闹心的问题——明明Docker服务都关停了,Laravel的日志文件还在不停被相同的数据库错误填满,而且找不到到底是什么在触发对吧?咱们一步步来揪出这个“幕后黑手”:

第一步:定位正在写入日志的进程

既然日志文件在WSL2的Ubuntu系统里,咱们可以用lsof命令直接找出哪个进程在访问这个日志文件:

  1. 先确保安装了lsof(如果没装的话,执行sudo apt update && sudo apt install lsof)
  2. 运行命令:
lsof /path/to/your/project/storage/logs/laravel.log

这个命令会列出所有正在读写该日志的进程,重点看PID列的进程ID。
3. 接着用PID查看进程详情:

ps aux | grep [你的PID]

通过这个命令你就能看到到底是哪个程序在搞事情——比如残留的PHP进程、Laravel队列Worker、定时任务脚本,甚至是IDE的后台进程都有可能。

第二步:结合错误栈分析触发点

从你贴的错误栈能看到,问题出在AppServiceProvider.php的第32行,调用了Model::all()(应该是Category::all()吧?),而且是在服务提供者的boot方法里。这意味着每次Laravel应用启动时,这个代码都会执行,所以肯定有某个进程在反复启动你的Laravel应用。

第三步:重点排查几个常见嫌疑对象

1. 定时任务(Cron)

WSL2里的Cron服务可能独立于Docker运行,如果你之前给Laravel配置过定时任务,比如设置了每分钟执行php artisan schedule:run,那即使Docker关了,Cron还是会按时触发这个命令,此时数据库容器没启动,自然就会抛出连接错误。

  • 先查看当前用户的Cron任务:crontab -e
  • 如果确实有Laravel的定时任务,先临时停掉Cron服务试试:sudo service cron stop,然后观察日志是否还在增长。

2. 残留的Laravel进程

比如之前启动的队列Worker(php artisan queue:work),可能在Docker关停后没被正常终止,一直在后台反复尝试连接数据库。

  • 用命令列出所有PHP进程:ps aux | grep php
  • 如果看到带有artisan queue:work或者其他Laravel命令的进程,直接用kill [PID]杀掉,再看日志情况。

3. IDE或代码分析工具

有些IDE(比如PHPStorm)会在后台自动运行PHP代码做语法检查、代码分析或者实时预览,这可能会触发Laravel应用启动,进而执行AppServiceProvider里的代码。

  • 可以暂时关闭IDE,或者禁用IDE里的Laravel相关自动检测功能,看看日志是否停止增长。

4. 其他后台服务

虽然你说本地Apache没激活,但可以再确认下WSL里有没有其他服务在运行,比如Nginx、PHP-FPM等:

  • 运行sudo service --status-all查看所有服务状态,把可疑的服务临时关停试试。

最后验证

找到可疑进程并处理后,等几分钟看看日志是否还会新增错误。如果停止了,那就是这个进程在搞鬼;如果还在增长,再回到第一步重新排查进程,可能还有漏网之鱼。

备注:内容来源于stack exchange,提问作者yossi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 14:59:36