TL;DR
config/logging.php
の設定を確認すること。
stackのchannelsをdailyに変更
Laravelをインストールして、私がまずやるのはログの設定を変更することです。
ログの設定はconfig/logging.php
にまとめられています。
single
やdaily
、slack
などがあり、デフォルトはstack
で、stack
は複数のログをchannels
でまとめることができます。
最新のLaravel 6.12.0では、stack
のchannels
は['single']
となっていました。
私はこのsingle
をdaily
に変更します。
...
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['daily'],
'ignore_exceptions' => false,
],
...
古の昔(バージョン4時代)も今と同じくsingle
だったのですが、最近はデフォルトでdaily
の記憶があります。
調べたら、5.8.35ではstack
のデフォルトはdaily
、
6.5.2までdaily
、6.8.0でsingle
に戻っていました。
何故に戻った。。。
single
のままだと、単一のログファイルにログが溜まっていき、巨大なログファイルを生成してしまいます。
しかも削除されません。
これがdaily
だとログローテーションで一定期間後には削除されます。
膨大なログを想定しているなら、それ相応のロギングシステムを外部サービス含めて検討すべきですが、
とりあえずはdaily
にしておくのが良策かなと思います
php_sapi_nameでログファイルを分ける
さらにですが、Webアクセスとコンソールコマンドで出力先ログファイルを分けます。
...
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel-'.php_sapi_name().'.log'),
'level' => 'debug',
'days' => 14,
],
...
例えばartisan
コマンドでエラーがログファイルに出力された後に、Webアクセスでエラーが発生した場合、ログファイルに書き込み権限がなくて書き込めないエラーが発生します
それが上記のように変更することで、artisan
コマンドでのエラーはlaravel-cli-YYYY-MM-DD.log
、
Webアクセスからのエラーはlaravel-fpm-fcgi-YYYY-MM-DD.log
に出力されます(Apacheだとapache2handler
になります)。
しかもログファイルによってエラー発生元が切り分けられて調査も楽になるので、皆さんも是非!!