2013-08-10 11 views
7

FastCGIはPHPエラーを適切に記録したくありません。まあ、それは完全には真実ではありません。警告のような他のものはログに記録しません。Nginx + FastCGI + PHP(php-fpm)がログに記録されないエラー/警告

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

php-fpmはちょっとしたハックなしでPHPエラーを単独でログに記録しません(nginxとは別に)。私は明らかに、error_logにパスを変更し

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

:PHP-FPMのインスタンス設定ファイルは、デフォルトで次の2行が含まれています。私はそれが実際には何をログに記録するために取得するために次の行を追加する必要がありました:

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)は気にしませんが、どこかでログに記録するにはキャッチしたエラーが必要です。私は自分のエラーハンドラと例外ハンドラを注入することに頼ることができますが、これはちょっとハッキリしているので、むしろそれを避けたいと思います。

+1

私は、Apacheは、この問題を持っていなかったことを想起における狂気のですか? – Zenexer

答えて

5

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

catch_workers_output = yes

+1

私はそのセットを持っていますが、まだ捕らえられたエラーを記録していません。 – Zenexer

+0

@Zenexerログに使用されているディレクトリとファイルに対するアクセス許可をチェックしましたか?おそらく 'root 'によって所有されるはずです。ディレクトリの 'chmod 0755'とファイルの' chmod 0644'です。 – parhamr

+0

ええ、権限は問題ありません。すべてがnginxによって所有され、nginxとして実行されます。それは物事を書きますが、すべてではありません。私は展示されることを意図していない振る舞いを期待していると思う。 Apacheも同じことをします。 – Zenexer

関連する問題