2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Laravelのログを一日より早くローテーションさせる

Last updated at Posted at 2021-12-21

PONOS Advent Calendar 2021」22日目の記事です。
昨日は@abcdeffさんの記事でした。

ログがスゴイ貯まる

最近Laravelのログがすぐインスタンスを圧迫するサービスが出てきたので、毎日ローテーションするかつ1日分のログしか残さない運用をしていました。
しばらくは順調だったのですが今度はローテーションする前に満杯になるようになってきました。
Laravelデフォルトのログ設定ではdailyしかない、困った。
というわけで時間毎にローテーションさせるための設定を作成しました。

Hourlyローテーション

Laravelのログ設定でdailyを選ぶとMonolog\Handler\RotatingFileHandlerクラスが使われるので、これを少しいじって1時間毎にローテションされるようにします。
まずはRotatingFileHandler.phpを適当な場所にコピーしてきて以下のように修正します。

RotatingFileHandler.php
public function __construct(string $filename, int $maxFiles = 0, $level = Logger::DEBUG, bool $bubble = true, ?int $filePermission = null, bool $useLocking = false)
{
    ...
    $this->dataFormat = 'Y-m-d-H';
    ...
}

これだけです。かんたん!
あとはconfig/logging.phpでこのハンドラーを使うチャンネルを追加して使用すればOKです。

logging.php
return [
    ...
    'hourly' => [
        'driver' => 'monolog',
        'level' => 'debug',
        'handler' => RotatingFileHandler::class,
        'handler_with' => [
            'filename' => storage_path('logs/laravel.log'),
            'maxFiles' => 6,
        ],
    ],
    ...
];

これで1時間毎にローテーションされて過去6時間分しかログが残らないようになりました!

明日は@honeniqさんの記事です。お楽しみに!!

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?