WordPressの本番運用中にログ出力をする方法
2016.08.04
2017.03.02 更新
WordPressのプラグインやテーマの開発で何かの文字を表示たいときに、どのように
していますでしょうか? WordPressのデバッグモードを利用すると、ログ出力が簡単にできます。
wp-config.php
の最後の方に
// WP_DEBUG モードを有効化 define( 'WP_DEBUG', true ); // /wp-content/debug.log ファイルへのデバッグログの出力を有効化 define( 'WP_DEBUG_LOG', true );
とすれば wp-content/debug.log
に時刻付きで出力してくれます。
ただし、これはあくまで開発中のデバッグを目的としたもので、本番運用中にはできません。
運用中に何かのログを取りたい場合は、 phpネイティブの関数error_log を利用します。
error_log は通常のphp関数でファイル出力に対応しています。
error_log("ログメッセージ", 3, ファイル名)
このままだと、出力時刻や改行も入らないので、テーマのfunctions.php
に下記のコードを追加して使いやすいようにします。
function my_log($message) { $log_message = sprintf("%s:%s\n", date_i18n('Y-m-d H:i:s'), $message); error_log($log_message, 3, ファイル名); }
このように設定しておけば、あとは好きな場所で my_log(“テスト”); と呼び出せば、
出力してくれます。
「ファイル名」は出力パスをフルパスで指定する必要があります。
WordPressでは下記のような定数を利用可能です。
ABSPATH | wordpressがインストールされているパス ※ 最後に’/’が付く |
WP_CONTENT_DIR | wp-conent のパス ※ 最後に’/’はつかない |
例えば
wp-content/logs/my_output.log
に出力したい時には、下記のように設定します。
function my_log($message) { $log_message = sprintf("%s:%s\n", date_i18n('Y-m-d H:i:s'), $message); error_log($log_message, 3, WP_CONTENT_DIR . '/logs/my_output.log'); }
wp-content/logs
予め作成しておく必要があります。またサーバーから書き込み可でなくてはなりません。
出力したログファイルを外部から見えないように
上記パスを指定した場合、外部から参照できてしまいます。見られてうれしくない情報の場合には、WordPressのあるDocumentRootより上の階層のパスを指定するべきでしょう。
もしアクセスできるパスで見られ欲しくないログファイルを出力する場合には
webサーバーがapacheでしたら wp-content/logs/.htaccess
のファイルに
Deny from all
と書いて設置します。
nginxでしたら 対象の用confファイルに
location /wp-content/logs/ { deny all; }
を追記します。
ログの肥大化を防ぐ
しばらくしてログのファイルサイズが大きくなると、速度や閲覧にも問題が出てきます。
そのような時は下記のように日付等の一定期間に変わるパラメータをファイル名に含めて出力し、適度な大きさを保つようにするのが良いでしょう。
function my_log($message) { $log_message = sprintf("%s:%s\n", date_i18n('Y-m-d H:i:s'), $message); $file_name = WP_CONTENT_DIR . '/logs/my_output_' . date_i18n('Y-m-d') . '.log'; error_log($log_message, 3, $file_name); }
以上、WordPressでのログの扱いについての手法を解説しました。データベースに記録するほどではないけど、ちょっとした値をあとで参照したい、等という時にログを使ってみると良いかもしれません。
プラグイン
上記、日付フォーマット等のカスタマイズを簡単に管理画面から操作できるプラグインWP Output Log Fileを公開しました。
インストールや使い方は「ログ出力を操作するプラグインWP Output Log Fileを公開」をご覧ください。