環境
- PHP8.2
- WordPress 6.0
現状
WordPressのユーザ、グループはapacheに設定されており、wp-config.phpには以下の記載をしてますが、debug.logが出力されません。
// デバッグモードを有効にする
define( 'WP_DEBUG', true );
// デバッグログを /wp-content/debug.log に出力
define( 'WP_DEBUG_LOG', true );
// 画面にはエラー、ワーニングを表示しない
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );
wp-content/の権限を777にしてみましたが変化有りませんでした。
対応
php-fpmの設定ファイル/etc/php-fpm.d/www.confを見るとログの出力先は以下のようになってます。確認したところ、WordPressのログも/var/log/php-fpm/www-error.logに出力されていました。
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on
上記2行をコメントアウトして、php-fpmとapacheを再起動したところ、debug.logが出力されるようになりました。
; php_admin_value[error_log] = /var/log/php-fpm/www-error.log
; php_admin_flag[log_errors] = on
sudo service php-fpm restart
sudo service httpd restart
おまけ
せっかくdebug.logが出力されるように設定しましたが、debug.logはデフォルトで/wp-content/に出力されるため、誰でもブラウザから見れてしまいます。
URL
https://ドメイン名/wp-content/debug.log
/var/log/php-fpm/www-error.logに出力された場合、ブラウザからは閲覧できません。ですので、セキュリティ的にはもとの設定のままで良かったですね。
ちなみにvar_dump()ではなくログ出力したいケースは、主にAJAXです。AJAXの場合var_dump()しても画面には出力されませんからね。
以下をfunctions.phpに追加するとログ出力できるようになります。
function log_me($message) {
if (WP_DEBUG === true) {
if (is_array($message) || is_object($message)) {
error_log(print_r($message, true));
} else {
error_log($message);
}
}
}
呼び出すときは以下のようにします。
log_me(get_categories());
ログ出力は以下を参考にさせていただきました。
10 Things Every WordPress Plugin Developer Should Know — Smashing Magazine
Plugins are a major part of why WordPress powers millions of blogs and websites around the world. The ability to extend ...