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

标签 nginx fastcgi php

FastCGI 不想正确记录 PHP 错误。好吧,这并不完全正确:它可以很好地记录错误,但需要一些小改动;它只是不会记录任何其他内容,例如警告。

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

php-fpm 本身不会记录 PHP 错误(与 nginx 分开)而无需一点 hack。 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),但我确实需要将捕获的错误记录在某个地方。我可以求助于注入(inject)我自己的错误和异常处理程序,但这有点老套,所以我宁愿避免这样做。

最佳答案

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

catch_workers_output = yes

关于Nginx + FastCGI + PHP (php-fpm) 不记录捕获的错误/警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18158128/

相关文章:

php - 从 mysql 中的 2 个表中获取数据(需要帮助)

node.js - 多个端口上的 Node nginx 代理,同一域不起作用

docker - 使用docker时如何更改nginx的端口

ssl - 是否可以在 nginx 中使用 SSL Passthrough 重定向 TCP 连接

python - Django:使用 Apache 和 FastCGI 部署应用程序

php - 在foreach中使用Curl

nginx - Cloudways Hosting - 应用程序显示网站不可用

来自 PIL 库的 fcgi 进程中的 Python ctypes MemoryError

python - 如何捕获在 IIS、FastCGI 和 WSGI 下运行的 Python 进程的 STDOUT?

javascript - 带有mysql的php中的php代码中的 bool 错误