PHP 的错误日志存放在哪里?

PHP 错误日志位置取决于实际 SAPI 与生效配置;需区分 Apache、PHP-FPM 进程日志、脚本错误与框架日志,不能仅凭固定路径定位。

最佳实践
PHP 的错误日志存放在哪里?封面

一句话答案:PHP 错误日志的位置取决于运行方式与生效配置——先查当前 SAPI 的 error_log 及覆盖设置。Apache 模块未指定目标时通常走 Apache 错误日志;共享主机/cPanel 按实际 PHP handler 与站点配置确定,不能把 Apache 主日志当成全部 PHP 错误的固定位置。自定义文件路径还须具备写权限。

按运行方式对号入座

运行方式 常见日志位置
Apache 模块(mod_php) /var/log/apache2/error_log 或站点 vhost 配置的错误日志
PHP-FPM 区分 FPM 进程管理日志与 PHP 脚本错误日志;检查 PHP error_log 及池级 php_admin_value[error_log]
cPanel 主机 由 PHP handler 与站点配置决定;/usr/local/apache/logs/error_log 是 Apache 日志路径
CLI 命令行 默认输出到终端 stderr

自定义位置:php.ini

log_errors = On
error_log = /var/log/php-scripts.log

确保 PHP 进程对该路径有写权限。改完重启 Apache 或 PHP-FPM 生效。

最可靠的定位方法:问 PHP 自己

<?php phpinfo(); ?>

仅在受限访问的临时诊断页打开,检查后立即删除,避免公开配置和环境信息;搜索 error_log,看到的 Loaded Configuration File 与 error_log 值就是当前生效配置。命令行等价写法:

php -i | grep error_log
php --ini   # 查看加载了哪些 ini 文件

注意 Web 模式与 CLI 模式可能加载不同的 php.ini。

应用级日志

框架(Laravel、CodeIgniter、ThinkPHP 等)还有自己的应用日志,如 Laravel 的 single 文件通道通常写入 storage/logs/laravel.log,daily、stderr 等通道目标不同,与 PHP 错误日志是两回事,排查问题时两边都要看。

找到真实日志文件后,再配置采集路径。例如用观测云 DataKit读取 PHP-FPM 或框架日志时,应分别核对运行用户、读取权限与轮转后的新文件;先触发一条测试错误,确认查询中能看到完整堆栈和正确时间。

常见问题(FAQ)

Q:phpinfo() 里 error_log 显示 no value 怎么办?
A:表示未设置,错误会走 SAPI 默认通道(Apache 模块通常写入 Apache 错误日志,CLI 通常输出到 stderr;FPM 需核对实际池与 handler 配置)。

Q:开了 log_errors 还是没有日志?
A:检查 error_reporting 级别是否包含想看的错误类型,以及目标文件对 PHP 进程用户是否可写。

Q:生产环境该用 display_errors 吗?
A:不该。生产环境 display_errors = Off、log_errors = On,错误进日志而不是页面。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台