laravel日志写入失败主因是环境配置问题,需重点排查三方面:一是清除配置缓存(php artisan config:clear),二是确认storage/logs目录权限正确(属主属组为web用户且chmod 755),三是核对.env中log_channel=stack、log_level=debug、app_debug=true三项配置是否准确有效。

日志目录写不进去,不是代码没调 Log::info(),而是环境没配对——重点查三件事:配置缓存是否清了、storage/logs 权限对不对、.env 里日志通道和级别设准了没。
确认配置缓存已清除
改过 .env 或 config/logging.php 后,Laravel 会用缓存配置,新设置不生效。必须手动清掉:
- 运行
php artisan config:clear - 别依赖
config:cache,开发阶段它反而锁死改动 - 清完可临时加一行
Log::info('config test')触发写入,看是否立刻出现在日志里
检查 storage/logs 目录权限
Linux 下常见问题是 Web 服务器用户(如 www-data 或 nginx)没有写权:
- 执行
ls -l storage/logs,确认属主和属组是 Web 用户(比如显示www-data www-data) - 若不对,运行:
sudo chown -R www-data:www-data storage/logssudo chmod -R 755 storage/logs - 别直接
chmod 777,有安全风险;755对目录足够,文件自动是644
核对 .env 日志配置项
很多问题出在 .env 配置被忽略或写错:
- 确保这三项存在且合理:
LOG_CHANNEL=stackLOG_LEVEL=debugAPP_DEBUG=true(开发环境必需) - 如果写了
LOG_CHANNEL=stderr,日志会输出到终端或 Docker logs,不会落盘——这不是故障,是目标变了 - 检查
config/logging.php中stack的channels数组是否包含'single'或'daily',否则日志无处可写
验证日志是否真在写入
别只盯着 laravel.log 是否更新,先确认底层通路通不通:
- 手动触发一次日志:
php artisan tinker→ 输入Log::info('test at '.now()); - 再执行
tail -n 1 storage/logs/laravel.log看有没有新增行 - 如果仍为空,说明前面三步至少有一处没到位;如果有内容但不实时,那是
tail -f或spatie/laravel-tail的问题,不是写入失败











