WordPressのnginx + php-fpm環境でデバッグログ(debug.log)が出ない件
2017.06.09

php-fpmの設定
忙しい方のために最初に結論です。nginx + php-fpm環境でwordpressを運用している方で、wp-config.php
内で
define( 'WP_DEBUG_LOG', true );
を設定しても どうしてもdebug.logがでない方は、下記php-fpmの設定ファイル、
/etc/php-fpm.d/www.conf
※ 上記パスはCentOS7.3の例です。
の中の下の方にあるerror_logを設定している部分にて、
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_value
を下記のようにphp_value
php_value[error_log] = /var/log/php-fpm/www-error.log
と変更して、php-fpmをリロードしてみてください。wordpress 内で ini_set( ‘error_log’ ..) が効くようになり、debug.log出力できるようになるはずです。
wordPressでのエラーログ
wordpressのテーマやプラグインを開発する時には DEBUGオプションをtrueにしておく事が推奨されています。この設定はwp-config.php
内で、下記のようにデフォルトではfalse
となっているWP_DEBUGオプションをtrueに設定します。
define('WP_DEBUG', true);
すると、画面上にプログラム実行上のエラーや警告はもちろん、Notice(通知)レベルの情報も表示してくれます。
例えば、少しテーマ開発の経験のある方ならよくご存じの サイトトップのurlを返してくれる関数、
get_bloginfo('home')
書いているテーマがあると、、
PHP Notice: get_bloginfo がバージョン 2.2.0 から非推奨になった引数付きで呼び出されました。関数bloginfo()
のオプションhome
は非推奨です。....
と表示してくれます。
画面でこんなメッセージがたくさん表示されると非常に見ずらいので、ログファイルに書き出してもらうようにするオプションがあります。
define('WP_DEBUG', true); define( 'WP_DEBUG_DISPLAY', false ); /* 画面に表示しない */ define( 'WP_DEBUG_LOG', true ); /* ログ出力を /wp-content/debug.log に */
詳しくはこちら「WordPressでのデバッグ」を参照してください。
さて、ここまでで、debug.logにメッセージが出力されている方はなんの問題もないのですが、
nginx + php-fpmを使っている方はここで悩むことになります。
apacheではパーミッションの問題で書き込んでくれない事があるのですが、その辺りを
解決したとしても、debug.logには書き込んでくれませんでした。
WP_DEBUG_LOGオプションで実行する部分は、
wp-includes/load.php
wp_debug_mode()
関数内
ini_set( 'error_log', WP_CONTENT_DIR . '/debug.log' );
の部分です。この部分がきちんとできれば良いのですが、テーマファイルの適当な所で、
としても何故か /var/log/php-fpm/www-error.log
と表示されてしまいます。
試しに以下のようなerror_logにファイルパスをセットして、そのセットした値を表示するだけのスクリプトを実行してみてください。
<?php ini_set( 'error_log', '/home/hoge/wp-content/debug.log' ); echo ini_get( 'error_log' );
出力は残念ながらセットされていません。
セットしたい環境変数が自前のスクリプト内で設定できるかできないかは、
にあります。
error_log は PHP_INI_ALL ですので、本来であれば自分のプログラム内で
ini_setで設定できるはずです。
実はこれはphp-fpm側の設定に問題がありました。
デフォルトのまま使用すると、以下のような設定になります。
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
このphp_admin_valueで設定すると、スクリプト内のini_setで設定できなくなってしまいます。
参考: 設定を変更するには
そこで冒頭て説明したphp_admin_value
を php_value
に変更してあげれば、めでたくdebug.log
が出力されるようになります。
デフォルトでこのような設定になっているというのは何か理由がありそうですが、残念ながら調べても出てきませんでした。
速度やセキュリティによる事情があるかもしれませんので、本番環境ではこの設定はしない方が無難かとおもわれます。
もし本番中に何かlogを出したくなったら、、下のプラグインを使ってみてください。(笑)
WordPressにプラグインを入れて高機能にしていくと今度はスピードが気になってきます。それに伴い、nginxを採用するようになってきました。WordPressが速いと評判のKUSANAGIでもnginxがデフォルトになっています。
nginx
でwordpressを動かしていて、つまずいた時にお役に立てれば幸いです。