8

FastCGI は、PHP エラーを適切に記録したくありません。まあ、それは完全に真実ではありません: 少しいじるだけで、エラーをうまくログに記録します。警告など、それ以外は何もログに記録しません。

悪名高い FastCGI -> Nginx ログのバグは必ずしも問題ではありません。php-fpm からのエラーと警告は直接 Nginx に送られますが、キャッチされない場合のみです。つまりset_error_handler、 がエラーのインターセプトに成功した場合、ログ エントリは追加されません。これは、解析エラーが表示されることを意味しますが、それだけです。

php-fpm は、ちょっとしたハックなしでは (nginx とは別に) PHP エラーをログに記録しません。php-fpm のインスタンス構成ファイルには、デフォルトで次の 2 行が含まれています。

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

バージョンに関する注意: PHP 5.3.27 を使用しているため、E_STRICT の部分は不要ですが、いずれ 5.4 にアップグレードする予定です。この行で、エラー (およびエラーのみ) を に記録し/mnt/log/php-fpm/default.logます。これはerror_reporting、php.ini で設定したのと同じ値に設定されるため、明らかに何かが間違っています。さらに、キャッチされたエラーはログに記録されません。動作は nginx ログと同じです。代わりに数値 (22527) を使用してみましたが、それでもうまくいきません。

エントリが最終的にどのログ ファイルに記録されるか (nginx と php-fpm) は気にしませんが、キャッチされたエラーをどこかに記録する必要があります。独自のエラー ハンドラーと例外ハンドラーを挿入するという手段に頼ることもできますが、それはちょっとハックなので、避けたいと思います。

4

1 に答える 1

6

PHP-FPM のプール構成ファイルでこのディレクティブを使用します。

catch_workers_output = yes

于 2013-08-10T04:36:42.203 に答える