- 1. 概要
- 2. デフォルト
- 3. ローテーション
- 4. あかん
- 5. システムにまかせる
1. 概要
ふと、気づくと、「Laravel」のログファイルが、えらい大きくなっておりました。
本ページは、下記のサイトを参考にさせていただきました。
「Laravel のログを日別でローテーションさせる( +自動削除 )」
「Laravel で Log ファイルの作成 ログファイルをローテーション」
2. デフォルト
「Laravel」のログファイルは。
project_path/storage/logs/laravel.log
であります。
参考サイトの記事によれば、ログローテーションの設定は、
/プロジェクトパス/.env
に記述してあるそうで・・・。
運用しているサイトのものを見てみたら
LOG_CHANNEL=stack
となっておりました。
まぁ、これがデフォルトなのだそうで・・・。
デフォルト設定値の意味は、参考サイトによれば、「『マルチチャンネル』チャンネルを作成するためのラッパー機能」だそうで、読んでもよく意味が分かりません。
3. ローテーション
ローテーションさせるには、前項の値を
LOG_CHANNEL=daily
に設定するのだそうです。
説明には「RotatingFileHandler ベースの毎日ファイルを切り替える Monolog ドライバ」と書いてあって、よくわかりませんが、とりあえず、「daily」にローテーションさせるようです。
なんか、候補に「weekly」や「montly」がないのも気になりますが・・・。
これ、「daily」にした場合、1日1回のローテーションだそうですが、前日のログファイルをどこまで残すかに関しては、
/プロジェクトパス/config/logging.php
を編集するのだそうであります。
なにもいじっていない状態で、上記のファイルを見てみました。
めぼしいところを記述すると(バージョンは「Laravel Framework 8.40.0」)
/*
|--------------------------------------------------------------------------
| Default Log Channel
|--------------------------------------------------------------------------
|
| This option defines the default log channel that gets used when writing
| messages to the logs. The name specified in this option should match
| one of the channels defined in the "channels" configuration array.
|
*/
'default' => env('LOG_CHANNEL', 'stack'),
/*
|--------------------------------------------------------------------------
| Log Channels
|--------------------------------------------------------------------------
|
| Here you may configure the log channels for your application. Out of
| the box, Laravel uses the Monolog PHP logging library. This gives
| you a variety of powerful log handlers / formatters to utilize.
|
| Available Drivers: "single", "daily", "slack", "syslog",
| "errorlog", "monolog",
| "custom", "stack"
|
*/
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['single'],
'ignore_exceptions' => false,
],
'single' => [
'driver' => 'single',
'path' => storage_path('logs/laravel.log'),
'level' => env('LOG_LEVEL', 'debug'),
],
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => env('LOG_LEVEL', 'debug'),
'days' => 14,
],
'slack' => [
'driver' => 'slack',
'url' => env('LOG_SLACK_WEBHOOK_URL'),
'username' => 'Laravel Log',
'emoji' => ':boom:',
'level' => env('LOG_LEVEL', 'critical'),
],
となっております。
まぁ、大概のサイトでは、これをいじる・・・と。
「.env」の設定はそのままに、31日間キープ、パーミッションもつけて
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['daily'], ★
'ignore_exceptions' => false,
],
'single' => [
'driver' => 'single',
'path' => storage_path('logs/laravel.log'),
'level' => env('LOG_LEVEL', 'debug'),
],
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => env('LOG_LEVEL', 'debug'),
'days' => 31, ★
'permission' => 0666, ★
],
「★」の行がいじってあるところですな。
まぁ、ちょいとこれで、やってみますか・・・。
ただ、いちいちこれも面倒なので、「FreeBSD」の場合「loglotate」にまかす手もあるかとは思いますが、まだこれはやってみていない・・・。
4. あかん
2021年8月30日にしかけて、今日見てみました。
$ ls -la /プロジェクトパス/laravel/storage/logs/
・・・ 略 ・・・
-rw-r--r-- 1 www www 148624 8月 30 23:59 laravel-2021-08-30.log
-rw-r--r-- 1 www www 397878 8月 31 10:34 laravel-2021-08-31.log
-rw-r--r-- 1 www www 121001684 8月 31 15:25 laravel.log
げげ、なんだこれ。
ちょっとお粗末というか、馬鹿なローテーションですなぁ・・・。
以前のログは、そのまま残っているし。
そもそも、最新のログを見ようと思ったら
tail -f /プロジェクトパス/laravel/storage/logs/
の後に、いちいち日付をうたにゃならんのか・・・。
そんなのはごめんだ。
ここは、オペレーティングシステムにまかせるかな。
5. システムにまかせる
これ、「Windows」ではできませんわなぁ。
「Linux」だと「loglotate」の設定だとかで同じようなことができるかと思います。
「FreeBSD」はこの点、お手軽なのだ。
/usr/local/etc/newsyslog.conf.d/laravel,conf
というファイルを置いて、中身に
# logfilename [owner:group] mode count size when flags [/pid_file] [sig_num]
/プロジェクトパス/laravel/storage/logs/laravel.log www:www 644 31 * @T00 B
書いておきゃいいのだ。
日替わりで、ローテーションして、圧縮なして 31日分キープします。
おっと、この際、
laravel-2021-08-30.log
laravel-2021-08-31.log
は、邪魔になるので削除します。
詳細は、「FreeBSD - メンテナンス・トラブルシュート - newsyslog・crontab」をご参照ください。
(実はちょっと謎だったのが、「*.log」と書いていけると思っていたら、何故か、それだとうまくいかない、いずれ機会があれば、調べねばならんかも・・・)
ふふふ、この点、「FreeBSD」は楽ちんなのだ。
|