Nginx+FastCGI+PHP(PHP-fpm)未记录捕获的错误/警告


Nginx + FastCGI + PHP (php-fpm) not logging caught errors/warnings

FastCGI不希望正确记录PHP错误。嗯,这并不完全是真的:它记录错误很好,只需要一点技巧;它只是不会记录任何其他内容,比如警告。

臭名昭著的FastCGI->Nginx日志错误当然不是问题。php-fpm中的错误和警告会直接进入Nginx,但前提是它们未被捕获。也就是说,如果set_error_handler成功截获错误,则不会附加任何日志条目。这意味着我可以看到解析错误,但仅此而已

php-fpm本身不会记录php错误(独立于nginx),而不需要一点破解。php-fpm的实例配置文件默认包括以下两行:

php_admin_value[error_log] = /mnt/log/php-fpm/default.log
php_admin_flag[log_errors] = on

很明显,我更改了error_log路径。我必须添加以下行才能真正记录任何内容:

php_admin_value[error_reporting] = E_ALL & ~E_DEPRECATED & ~E_STRICT

版本说明:E_STRICT部分是不必要的,因为我使用的是PHP 5.3.27,但我计划在某个时候升级到5.4。通过这一行,它将错误(而且只记录错误)记录到/mnt/log/php-fpm/default.log。现在,这将error_reporting设置为与我在php.ini中设置的值相同的值,所以这里显然有问题。此外,它不记录捕获的错误:行为与nginx日志的行为相同。我尝试使用数值(22527),但仍然没有成功。

我不在乎条目最终出现在哪个日志文件中(nginx与php-fpm),但我确实需要捕捉到的错误记录在某个地方。我可以使用注入自己的错误和异常处理程序,但这有点麻烦,所以我宁愿避免这种情况。

我在PHP-FPM:的池配置文件中使用此指令

catch_workers_output = yes