XSERVERでは生ログファイルをサーバースペースに保存するログローテーション機能が提供されていないので自分で作成する必要があります。

※アクセスログはこの処理をせずとも、標準で30日間自動的に/home/hogehogesvr/hogehoge.com/log/に保存されています。


上記の順でやっていきましょう。

この方法では、永遠にログファイルが溜まり続けます。ある一定条件でログファイルを消すプログラムを作成したり、手動で消すなどしないと、サーバー容量が足りなくなりサイトがダウンしますのでご注意ください。

php.iniを編集する

XSERVERでは、エラーログは管理パネルから手動ダウンロードするようになっていて、生ログはサーバースペース上に出力保存されません。
サーバースペース上に自動的に出力したい場合は、ログを出力したいドメインのフォルダ直下にあるphp.iniファイルをを直接編集して、ログを任意のlogディレクトリに出力するように設定する必要があります。

php.iniに以下の行を追加します。

log_errors = On
error_log = /home/hogehogesvr/hogehoge.com/log/error.log
log_errors_max_len = 1024

php.iniはXSERVER管理パネルメニュー>php.iniの設定>直接編集で行うか、
FTPでドメイン直下に初期設置されているuser.iniファイルを編集してください。

※log_errors_max_lenは、ログファイルの中の1行の文字列の長さです。普通は1024で十分足ります

phpを作成する

ログファイル名に年月日を追加して保存するphpを作成します。今回は1日1回ローテーションする前提です。

<?php

$today = date('Ymd');
$log_file = '../log/error.log';
$new_file = '../log/error-' . $today . '.log';

if (file_exists($log_file)) {
   copy($log_file, $new_file);
}

?>

作成したphpファイルを、任意の場所に保存します。
私の場合はlogrotate.phpというファイル名にし、以下の場所に保存しました。

/home/hogehogexsvr/hogehoge.com/script/logrotate.php

cronにphpを登録する

loglotate.phpをcronに設定します。
XSERVERの場合は毎日3時にファイルがクリアされるので、2時59分にファイルを複製して日付入りの名前のファイルを生成することにしました。

0 4 * * * /usr/bin/php7.4 /home/hogehogexsvr/hogehoge.com/script/logrotate.php

分:59 (毎59分)
時:2 (毎2時)
日:*(毎日)
月:*(毎月)
曜日:*(毎曜日)
コマンド:/usr/bin/php7.4 /home/hogehogexsvr/hogehoge.com/script/logrotate.php
コメント:hogehoge.comのログローテーション(管理パネル上で識別するための名前なのでわかりやすい任意の名前でOK)

「*=すべてのxx、毎xx」の意味になります。
コマンドには、使いたいphpのバージョン(7.4でも8系でもご自分の環境に合わせてください)と
phpへのフルパスを記載します。

管理パネルのcron設定で以下のように入力しました。

以上で、 XSERVERのエラーログをログローテーションする方法でした。