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) は気にしませんが、キャッチされたエラーをどこかに記録する必要があります。独自のエラー ハンドラーと例外ハンドラーを挿入するという手段に頼ることもできますが、それはちょっとハックなので、避けたいと思います。