【问题标题】:Nginx + FastCGI + PHP (php-fpm) not logging caught errors/warningsNginx + FastCGI + PHP (php-fpm) 不记录捕获的错误/警告
【发布时间】:2013-08-12 01:27:41
【问题描述】:

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),但我确实需要在某处记录捕获的错误。我可以求助于注入我自己的错误和异常处理程序,但这有点笨拙,所以我宁愿避免这样做。

【问题讨论】:

  • 想起 Apache 没有这个问题,我是不是疯了?

标签: nginx fastcgi php


【解决方案1】:

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

catch_workers_output = yes

【讨论】:

  • 我有那个设置,但它仍然没有记录捕获的错误。
  • @Zenexer 你检查过日志中使用的目录和文件的权限吗?它们可能应该归root 所有; chmod 0755 用于目录,chmod 0644 用于文件。
  • @Zenexer 原来有一个 PHP 错误:stackoverflow.com/a/11250412/1429647
  • 不,我在 5.5.x 上。原来 vBulletin 只是拦截了所有内容并将其转储,这是我应该猜到的。
  • 这当然是该问题的常见答案,因此我将其标记为答案,因为它最终变得无关紧要。
猜你喜欢
  • 2016-08-25
  • 2011-03-12
  • 2013-12-24
  • 2020-04-29
  • 2017-01-19
  • 2013-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多