WordPress のログ出力方法と仕組み

原始的な PHP のデバッグ方法として
echo や var_dump(), print_r() を利用する手法がありますが、
WrodPress ではこれらを行うと
HTTP レスポンスに書き込まれてしまい
ブラウザの表示が大きく崩れて
以降、正しく動作しなくなってしまうことがあります。

この記事では ブラウザの表示に影響をあたえず
WordPress のログを出力する方法を、
Stack Overflow の回答から翻訳しつつ詳細を解説します。

参考: php – How can I use error_log() with WordPress? – Stack Overflow

手順

wp-config.php などで次のように定数を定義します。

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );

そして、確認したい箇所で error_log() という関数を使い、ログを出力します。

error_log( 'Hello World!' );

すると、WP_CONTENT_DIR で指定されているディレクトリー
(デフォルトでは wp-content) に debug.log というファイルが作成され、
ログが残ります。

print_r() 関数の第二引数に true をセットして引数に設定すると
変数の詳細を調査することもできます。

error_log( print_r( 'Hello World!', true ) );

参考: PHP: print_r – Manual

もし、エラーメッセージを画面に表示させたくないのに表示されてしまう場合は、
wp-config.php などで次の定数定義も行います。

define( 'WP_DEBUG_DISPLAY', false );

残念ながら、ログのレベルは指定できないようです。

詳細解説

PHP には error_log() という関数があります。

error_log ( string $message [, int $message_type = 0 [, string $destination [, string $extra_headers ]]] ) : bool

PHP: error_log – Manual

この関数は第一引数 $message をログとして残すことができます。
ログをどこに残すかは第二引数 $message_type で変更できますが、
指定しなかった場合 (0 の場合) の振る舞いは
php.ini の “error_log”という項目の設定に依存します。
この設定項目 “error_log” にファイルパスが指定された場合は、
そのパスのファイルにログが残されます。

参考: PHP: 実行時設定 – Manual

この ini の設定は、 WordPress では
wp-include/load.php wp_debug_mode() という関数で設定されます。

この関数を確認すると、”error_log” の設定がなされるためには
定数 WP_DEBUG が true である必要があります。
また、併せて定数 WP_DEBUG_LOG を true に設定すると
定数 WP_CONTENT_DIR で設定されているディレクトリーに
debug.log というファイルが生成され、
ログが書き込まれるようになることがわかります。

この wp_debug_mode() は
wp-settings.php から必ず呼び出されるようになっており、
サーバーへのリクエストから辿ると、次の順番で呼び出されます。

index.php → wp-blog-header.php → wp-load.php → wp-config.php → wp-settings.php → load.php / wp_debug_mode()

タイトルとURLをコピーしました