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になります)。
しかもログファイルによってエラー発生元が切り分けられて調査も楽になるので、皆さんも是非!!