ngix + php-fpm の組み合わせで特に Errorログについて整理しときます。
初心者向け補足
プール向け設定ファイル = /etc/php-fpm.d/www.conf
全体の設定ファイル = /etc/php-fpm.conf
php-fpmのログまとめ
error.log
php-fpm 全体で出す Errorログです。これは global
ディレクティブでしか設定出来ません。 このファイルは、デフォルトでは各プールの標準エラーなどを出力されることはありません。各プールのエラーを出力したいならば catch_workers_output = yes
を、プールの設定ファイルに記載します。 ただし、このパラーメータには注釈があります。
; Redirect worker stdout and stderr into main error log. If not set, stdout and
; stderr will be redirected to /dev/null according to FastCGI specs.
; Note: on highloaded environement, this can cause some delay in the page
; process time (several ms).
; Default Value: no
パフォーマンスに若干影響するということなので、気になる人はデフォルトの noが良いでしょう。
このファイルはphp-fpm マスタープロセスがつかみます。ので、logrotate時にシグナルを打つ必要があります。
$pool.access.log
プール毎
に設定できる access.logです。 このファイルはphp-fpm ワーカープロセスがつかみます。ので、logrotate時にシグナルを打つ必要があります。
xxx-slow.log
プール毎
に設定できる slow-logです。 php-fpm ワーカープロセスが出しているはずですが、ファイルはつかんでいません。
www-error.log
rpmデフォルトの設定を参考に書きます。プール毎
に設定できるのですが、これはphp-fpm
が出力しているのではなく、言語としての php が出力しています。
プール毎に設定できるので、これを使うのがベストプラクティスだと思います。
ファイルの出力は、エラーが発生したタイミングで発生します。また、php-fpmが出力していないので、出力するユーザーはワーカプロセスの実行ユーザー = プール向け設定ファイルで設定するユーザー&グループとなります。例えば nginx + php-fpm の組み合わせ centosなどの場合、 /var/log/php-fpm の所有権が apache となっているため、 www.confで 実行ユーザーをnginxなどとしていると ファイル出力出来ません。
nginx側のログ
ワーカープロセスの標準エラーは、実は nginxのerror.logにそのまま出力されます。しかし、日付等が記載されず、そのままなので、その点不便です。
おまけ php-fpm のログ出力パーミッションを変更したい
/var/log/php-fpm/xxx.log のうち、php-fpm自身が出力するものはすべて 600で吐き出され、しかも rootがオーナーです。これを設定ファイルでかえることは残念ながら出来ないようです。パッチは出ています。
https://github.com/sandyskies/php-filemode-patch