最近、マイブームなワードプレス(WordPress)
このサイトも例外ではありませんが、以前は AWS の EC2 で動かしていました。
しかも「nginx + PHP(Codeigniter) + MySQL(RDS) + Redis(ElastiCache)」な構成で。
PHP のフレームワークを使うとログ管理も楽なのですが、ワードプレスでは「どこに(場所)」「どのように(機能)」ログ出力したらいいのかが最近の悩みでした。
今回は必要最低限なログ管理方法を模索したいと思います。
ログ出力が必要なわけ
「ワードプレスでログ出力なんて必要なの?」
「記事を書いて投稿するだけでしょ?」
って思われるかもしれませんが、テーマ(子テーマ)を触り始めると話は変わります。
例えばワードプレスの記事内に入力欄を設けて、その内容を非同期(Ajax)で計算させたいとか、何か動きを持たせたいケースって出てきますよね。
・生年月日から年齢を計算したい
・ひらがなをローマ字変換したい
・星座を選択して占いをしたい
やりたいことは無限大ですよね。
その際に入力値や計算結果など、デバッグついでにログ出力(infoログ的な役割)しておきたいわけです。
(個人情報的なものは当然排除です)
ちなみに、私は「JIN」というテーマを使っていて、そこから子テーマを作成してカスタマイズしています。
最近ようやく覚えたばかりなんですけどね。ワードプレスは奥が深い・・・。
ログの設計
ワードプレスでは、デバッグログの管理が設定ファイルで制御できるようです。
wp-config.php の以下の定数が該当します。
1 2 3 | define('WP_DEBUG', false); define('WP_DEBUG_LOG', false); define('WP_DEBUG_DISPLAY', false); |
しかし、設定値を触ってまで簡易的なログを出力するのもどうかと思うので、定数は触らずに error_log() 関数だけを利用することにしました。
ログ出力関数の追加
冒頭でも書いたとおり子テーマを作成しているので、気軽に function.php に関数を追加しちゃいます。
シンプルなログ出力だとこんな感じでどうでしょうか。ログが多くなりそうな場合はファイル名に日付を付けてあげるといいですね。
1 2 3 4 5 6 7 | function log_message($msg) { error_log( sprintf('[%s] %s%s', date_i18n('Y-m-d H:i:s'), $msg, PHP_EOL), 3, sprintf('%s/../../info_%s.log', WP_CONTENT_DIR, date_i18n('Ymd')) ); } |
ログには日時が一緒に表示されていた方が便利なので、先頭に日付を出力するようにしました。
最初は date() 関数を使っていたのですが、これだと UTC の時刻になってしまうので、ワードプレスに用意されている date_i18n() で代用しました。
デフォルトのタイムゾーンも設定で「Asia/Tokyo」に変更できるようですが、今回はこの部分だけでしたので関数で逃げます。
また、閲覧者が見えない場所にログを配備するような考慮も必要になってきますよね。
(見られて困らない内容なら無法地帯でもいいですが)
今回は WP_CONTENT_DIR の上の階層がドキュメントルートだったので、そのまた上のディレクトリにログを吐けば問題ないですね。シンプルですが、悪くない感じに仕上がりました。
[2020-03-04 01:01:18] log test
[2020-03-04 01:01:22] log test2
[2020-03-04 01:01:25] log test3