人気のPHP WEBアプリケーションフレームワークLaravelのTipsを記録していきます

Laravelのログを日別でローテーションさせる( +自動削除 )

● Laravelのログを日別でローテーションさせる

Laravelのログはデフォルトでは1つのファイルに追記を繰り返していきます。
ローテーションさせましょう。

.envファイルのデフォルト値「stack」を「daily」に変更します。

.env

LOG_CHANNEL=stack

 ↓

LOG_CHANNEL=daily

これだけでローテーションできるようになります。

● Laravelのログの最大保存日数を設定する

/config/logging.php の days 項目に設定できます。

        'daily' => [
            'days' => 7,
        ],

その他以下のような設定が可能です。

名前 説明
stack 「マルチチャンネル」チャンネルを作成するためのラッパー機能
single シングルファイル/パスベースのロガーチャンネル(StreamHandler
daily RotatingFileHandlerベースの毎日ファイルを切り替えるMonologドライバ
slack SlackWebhookHandlerベースのMonologドライバ
syslog SyslogHandlerベースのMonologドライバ
errorlog ErrorLogHandlerベースのMonologドライバ
monolog サポートしているMonologハンドラをどれでも使用できる、Monologファクトリドライバ
custom チャンネルを生成するため、指定したファクトリを呼び出すドライバ

monolog を選択して、深刻なエラーの場合はメールなり通知を送信するという運用が実用的かと思われます。

● cronを使っている場合に cron実行ユーザーの権限でログを作成されてしまうので permission denied エラーとなる場合の対処法

/config/logging.php に permission 項目を記述できます。 (Laravel version 5.6.10 以降)

        'daily' => [
            'driver' => 'daily',
            'path' => storage_path('logs/laravel.log'),
            'level' => 'debug',
            'days' => 7,
            'permission' => 0666,
        ],
No.1332
06/22 11:56

edit