先让错误露出来,再找准日志落点并交叉验证:在public/index.php首行插入ini_set('display_errors','1')和error_reporting(E_ALL);确认runtime/log/可写且LOG_RECORD=true;同步检查PHP错误日志、Web服务器日志及ThinkPHP运行时日志。

ThinkPHP部署后出问题,日志是第一手线索,但很多人找不到、看不懂、等不到——不是没日志,而是它被卡在半路了。核心就三点:让错误露出来、找准日志落点、交叉验证来源。
先让真实错误显示出来
页面空白、500、无提示?大概率是错误被静默吞掉了。别急着改代码,先打开错误显示:
- 编辑 public/index.php,在
<?php后第一行插入:
ini_set('display_errors', '1');<br> error_reporting(E_ALL); - 刷新页面,看是否出现红色堆栈(如 Class not found、Parse error)
- 如果仍空白,说明错误发生在框架加载前(比如 autoload 失败、扩展缺失),必须查日志
确认 ThinkPHP 日志到底写到哪了
默认路径是 runtime/log/,但实际落点受配置、环境、驱动三重影响:
- TP6/8 默认按日期分文件:如
runtime/log/2026-07/08.log;TP5 可能是runtime/log/error.log - 检查
config/log.php中的'path'配置,注意它可能被环境配置覆盖(如config/prod/log.php) - 确认
'driver' => 'file',不是'stdout'或'socket'(后者不会生成文件) - 运行
php think log命令可自动定位并输出最新日志;加--tail实时跟踪:php think log --tail
三个日志源必须一起看
ThinkPHP 日志只记录框架内异常,很多致命错误根本进不了框架:
立即学习“PHP免费学习笔记(深入)”;
-
PHP 错误日志:运行
php -i | grep error_log查路径,常见于/var/log/php_errors.log或/var/log/php8.1-fpm.log,重点找Fatal error、Segmentation fault -
Web 服务器日志:Nginx 是
/var/log/nginx/error.log,Apache 是/var/log/apache2/error.log,看是否有Permission denied、File not found -
ThinkPHP 运行时日志:确保
runtime/和runtime/log/对 Web 进程用户(如www-data、nginx)可写:ls -ld runtime runtime/logchown -R www-data:www-data runtime
常见“日志消失”原因速查
目录空、日志停更、查不到刚写的记录?优先排查这些:
-
权限链断裂:Web 用户对
runtime有写权限,但对其父目录缺少执行(x)权限,无法进入子目录 -
磁盘满或只读挂载:
df -h看空间,mount | grep $(pwd)看是否只读 -
级别设太高:
config/log.php中'level' => 'error'时,Log::info()不会落地;开发期建议设为'debug' -
多应用或容器场景:日志路径未区分应用名,或用了
stdout驱动——这时得用docker logs或supervisorctl tail查



















