【XServer】過去のエラーログを残す方法

XServerではプランを問わず、エラーログが午前3時にリセットされます。

つまり、午前3時を起点として24時間分しかエラーログが残りません。

 

「昨夜問題が発生して原因を調査したい!」なんて言う時にログがなくて困ったことになってしまうわけです。

エラーログは秘密の場所にある

さて、そんな時にすぐに思いつく方法と言えば、リセットされる午前3時の前にバックアップを取っておけばいいじゃん、ということです。

 

しかし、XServerではデフォルトでログファイルが隠されており、ユーザーが直接確認したり操作することはできません。

エラーログの出力先を変える

しかし、エラーログの出力先を変えることは難しくありません。

単純にPHP.iniにエラーログの出力先を記述すれば良いのです。

 

手順は簡単です。

  1. XServerのサーバーパネルを開く
  2. php.ini設定を開く
  3. 対象のドメインの「選択する」をクリック
  4. php.ini直接編集タブをクリック
  5. エラーログの出力先を指定する

エラーログの出力先を指定するには以下の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時間ごとにログファイルが区切られるわけです。

実際には、これだけではログファイルが溜まり続けるため、自動的に古いログファイルを削除する処理も必要になります。

 

 

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