PHP
Ubuntu
php-fpm
PHP7.2

Ubuntu 上で動く PHP-FPM でエラーログを出力する

サーバ移転前の環境では PHP 実行時のエラーログが標準(エラー)出力や error_log ファイルに書き出されていたが、新環境ではデフォルトで書き出されなくなっていた。

Web で調べてみると「catch_workers_outputyesに設定する」という記述がいくつかのサイトで見受けられたのだが、この設定でやっていることは「ワーカープロセスのログをメインのログにリダイレクトする設定」であり、ワーカープロセスが書き出したエラーのみ見たい場合には不適切だ。

ここでは、ワーカープロセスのエラーログ書き出しを有効にするために行なった設定をログとして残しておく。なお、OS は Ubuntu 16.04、PHP のバージョンは 7.2 である。

PHP プール設定の変更

PHP7.2 のワーカープロセスに関する設定は、プール用設定ファイル /etc/php/7.2/fpm/pool.d/www.conf で設定するようだ。

sudo viで設定ファイル内を見てみると、以下のような記述があった。

www.conf
; Default Value: nothing is defined by default except the values in php.ini and
;                specified at startup with the -d argument
;php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com
;php_flag[display_errors] = off
;php_admin_value[error_log] = /var/log/fpm-php.www.log
;php_admin_flag[log_errors] = on
;php_admin_value[memory_limit] = 32M

このうち、以下の2行を uncomment し、エラーログ出力を有効にする。

www.conf
php_admin_value[error_log] = /var/log/fpm-php.www.log
php_admin_flag[log_errors] = on

修正を保存後、以下のコマンドで PHP-FPM を再起動する。

console
$ sudo systemctl restart php7.2-fpm

Web サーバの再起動は特に必要ない。

ログファイルの権限変更

こちらのページによると、上記の設定だけでは実行ユーザ(当環境ではnginx)から権限の問題でエラーログが出力できないらしい。
なので、予め権限を設定した空のログファイルを作成しておく。

console
$ sudo touch /var/log/fpm-php.www.log
$ sudo chown nginx:nginx /var/log/fpm-php.www.log

必要に応じてchmodでパーミッションの設定もする。

以上の設定を行なえば、/var/log/fpm-php.www.logにエラーログが書き出されるはず。

補足

php_flag[display_errors]onに設定すれば、エラーが画面に出力される。