日志未写入主因是配置缓存未清、权限不足或LOG_LEVEL过低;需检查LOG_CHANNEL配置、运行php artisan config:clear、确认storage/logs写权限及LOG_LEVEL=debug。

日志没写进去,90% 是配置缓存没清或权限不对,不是代码问题。
storage/logs/laravel.log 空或不更新?先查这三件事
常见现象:调了 Log::error('test'),但 storage/logs/laravel.log 里啥也没有;或者只在本地有日志,上线后就消失。
-
LOG_CHANNEL配置是否生效?检查.env中是否写了LOG_CHANNEL=stack(或single),并确认config/logging.php里对应 channel 的path确实指向storage_path('logs/laravel.log') - 配置缓存是否过期?改完
.env或config/logging.php后,必须运行php artisan config:clear—— 开发中别偷懒跳这步,config:cache反而可能锁死新配置 -
storage/logs/目录权限够吗?Linux 下常见错误是 Web 用户(如 www-data)无写入权,用ls -l storage/logs看属组,再执行chmod -R 755 storage/logs和chown -R www-data:www-data storage/logs
tail -f 看不到实时日志?别急着重装包
现象:执行 php artisan tail 报错“command not found”,或运行后没输出、卡住、中途断连。
- 确认是否已安装官方推荐的
opcodesio/log-viewer或社区常用包(如laravel-tail),仅靠 Laravel 自带命令不行 -
tail命令依赖日志文件存在且持续写入,如果laravel.log本身为空,tail -f就会静默等待——先手动触发一次报错或Log::info('ping')确保有内容 - 宝塔等面板环境常因日志文件过大(>100MB)导致
tail失效,可临时用tail -n 50 storage/logs/laravel.log验证基础读取能力
ERROR 找得到,但 DEBUG/INFO 不见?看 LOG_LEVEL 和通道定义
现象:Log::debug() 不落盘,但 Log::error() 正常;或 daily 通道写进去了,stack 却没反应。
-
LOG_LEVEL默认是production环境下的error,开发时务必设为debug,否则debug/info级别直接被过滤掉 -
stack通道是聚合器,它是否包含single或daily?打开config/logging.php查'stack' => ['channels' => ['single']],如果写成['files']而实际没定义fileschannel,日志就丢了 - Monolog 的 level 是「最低记录级别」,
level => 'debug'表示 debug 及以上(info、error……)都记;level => 'error'则 debug/info 全部静音
线上不敢开 APP_DEBUG=true,怎么快速定位 500 错误?
现象:生产环境页面空白或 500,浏览器看不到任何提示,但 laravel.log 里也没 ERROR 记录。
- 先确认异常是否被
app/Exceptions/Handler.php拦截却没上报——检查report()方法里有没有漏掉parent::report($exception) - 某些致命错误(如 PHP Parse Error、内存溢出)根本进不了 Laravel 异常处理流程,它们会记在 PHP 错误日志里,不是
laravel.log。查php.ini的error_log路径,或 Nginx/Apache 的 error log - 队列任务失败也不会自动写进
laravel.log,除非你在failed()方法里显式调用Log::error();failed_jobs表里的exception字段才是第一手线索
最常被忽略的一点:日志路径可以是绝对路径,但一旦用了 storage_path(),就必须确保 storage 目录本身可写——它比 logs 子目录更容易被 chmod 漏掉。










