【WordPress】debug.logが作成されない

WordPress
環境
  • 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 ...
タイトルとURLをコピーしました