在Nginx与php-fpm配置中记录php错误日志的方法与技巧
Nginx是一个高性能的Web服务器,它通常与php-fpm(FastCGI进程管理器)一起使用来处理PHP请求。然而,很多人发现,在Nginx的访问日志中,只能看到对访问页面的记录,而无法找到PHP错误日志的信息。这是因为Nginx将PHP请求转发给php-fpm处理,而php-fpm默认情况下只输出自身的错误信息,并将这些错误信息记录在其错误日志中。
但是,很多人发现即使检查了php-fpm的错误日志,仍然找不到PHP的错误日志。这是因为php-fpm的配置文件php-fpm.conf中默认关闭了worker进程的错误输出,并将它们重定向到了/dev/null,这是一个空设备,代表丢弃所有输入。因此,在Nginx的错误日志和php-fpm的错误日志中都看不到PHP的错误日志。这给调试工作带来了很大的困扰。
为了解决这个问题,我们可以采取以下步骤来确保PHP错误日志被正确记录:
1. 修改php-fpm.conf中的配置:
catch_workers_output = yes
error_log = log/error_log
如果php-fpm.conf中没有找到这些配置,则需要手动添加。
2. 修改php.ini中的配置:
log_errors = on
error_log = '/usr/local/lnmp/php/var/log/error_log'
error_reporting=E_ALL;~E_NOTICE
同样地,如果php.ini中没有这些配置,也需要手动添加。
3. 重启php-fpm。这样,当PHP执行错误时,错误日志就能够被记录到指定的文件中。
需要注意的是:
- php-fpm.conf中的php_admin_value[error_log]参数会覆盖php.ini中的error_log参数。因此,确保最终的错误日志文件具有可写权限,并且没有在php-fpm.conf中设置php_admin_value[error_log]参数,否则错误日志将会输出到php-fpm的错误日志中。
- 如果找不到php.ini的位置,可以使用php的phpinfo()函数来查看配置信息。
- 要修改PHP错误日志不输出到页面或屏幕上,可以在php.ini中进行如下设置:
display_errors = off
log_errors = on
error_reporting = E_ALL
error_log = ''
或者在PHP脚本中使用以下代码:
php
ini_set('display_errors', 0);
ini_set('error_reporting', E_ALL);
ini_set('error_log', '');
ini_set('log_errors', 1);
通过上述配置,我们就可以在指定的日志文件中找到PHP的错误日志,从而更轻松地进行调试和错误处理。