PHP 的错误日志存放在哪里?
PHP 错误日志位置取决于运行方式:Apache 模块模式在 /var/log/apache2/,cPanel 在 /usr/local/apache/logs/error_log,也可在 php.ini 用 error_log 自定义。本文给出定位方法。
一句话答案:PHP 错误日志的位置取决于运行方式——作为 Apache 模块运行时通常随 Apache 写在 /var/log/apache2/(如 error.log);共享主机常在站点根目录的 log 子目录;cPanel 环境主日志在 /usr/local/apache/logs/error_log;也可用 php.ini 的 error_log 指令指定任意路径。
按运行方式对号入座
| 运行方式 | 常见日志位置 |
|---|---|
| Apache 模块(mod_php) | /var/log/apache2/error_log 或站点 vhost 配置的错误日志 |
| PHP-FPM | /var/log/php-fpm/ 或 php-fpm.conf 中 error_log 指定处 |
| cPanel 主机 | /usr/local/apache/logs/error_log 及每个站点的 error_log |
| 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 在 storage/logs/laravel.log,与 PHP 错误日志是两回事,排查问题时两边都要看。
观测云对照
PHP 应用统一采集。 用 DataKit 采集 PHP-FPM 错误日志和框架应用日志,配合 Pipeline 做解析;如果是容器化部署,DataKit 直接按容器采集 stdout 日志,不必关心日志落在哪个文件路径。
常见问题(FAQ)
Q:phpinfo() 里 error_log 显示 no value 怎么办?
A:表示未设置,错误会走 SAPI 默认通道(Web 模式写进 Web 服务器错误日志,CLI 输出到 stderr)。
Q:开了 log_errors 还是没有日志?
A:检查 error_reporting 级别是否包含想看的错误类型,以及目标文件对 PHP 进程用户是否可写。
Q:生产环境该用 display_errors 吗?
A:不该。生产环境 display_errors = Off、log_errors = On,错误进日志而不是页面。