XServerではプランを問わず、エラーログが午前3時にリセットされます。
つまり、午前3時を起点として24時間分しかエラーログが残りません。
「昨夜問題が発生して原因を調査したい!」なんて言う時にログがなくて困ったことになってしまうわけです。
エラーログは秘密の場所にある
さて、そんな時にすぐに思いつく方法と言えば、リセットされる午前3時の前にバックアップを取っておけばいいじゃん、ということです。
しかし、XServerではデフォルトでログファイルが隠されており、ユーザーが直接確認したり操作することはできません。
エラーログの出力先を変える
しかし、エラーログの出力先を変えることは難しくありません。
単純にPHP.iniにエラーログの出力先を記述すれば良いのです。
手順は簡単です。
- XServerのサーバーパネルを開く
- php.ini設定を開く
- 対象のドメインの「選択する」をクリック
- php.ini直接編集タブをクリック
- エラーログの出力先を指定する
エラーログの出力先を指定するには以下の1行を追加します。
場所はどこでも構いませんが、display_startup_errors = Offの下あたりが適当でしょう。
error_log = エラーログの出力先
エラーログの出力先は以下の形式で指定します。
ホームディレクトリ/ドメイン名/好きな場所
「ホームディレクトリ」はXServerサーバーパネルのサーバー情報から確認できます。
例えば以下のように指定します。
error_log = /home/XXXXXXXX/abc.com/log/php.log
エラーログのログローテーションを行う
ここまでの設定で、logディレクトリにphp.logというログファイルが生成されるようになりました。
しかし、このままではphp.logにログが溜まり続け、ファイルサイズが肥大し続けてしまいます。
そこで、一般的に「ログローテーション」と呼ばれる対策を行います。
簡単に言ってしまえば、大きくなったログファイルの名前を変えてあげるわけです。
例えば「php.log」を「php.log.20201010」などに変更すれば、それ以降のログはまたphp.logに1から溜まり続けます。
最も基本的なログローテーションの処理をPHPで記述すると以下のようになります。
<?php $log_file = "/log/php.log"; $today = date("Ymd"); if(file_exists($log_file)) { rename($log_file, $log_file.$today); } ?>
これをCRONなどで毎日呼び出してやれば、24時間ごとにログファイルが区切られるわけです。
実際には、これだけではログファイルが溜まり続けるため、自動的に古いログファイルを削除する処理も必要になります。