タイトルの通り Laravel6.0LTS にて、ログレベルを環境変数で変更するための手順です。
チャンネルやその他の項目も含めてログに関するいろいろな設定については他に詳しい記事がありますのでそちらをご参照ください。
Laravel5.6 での ログ設定について
ここでは、そこまで複雑なことがしたいわけではなく、シンプルに、開発環境ではDEBUGまで、ステージ、本番環境ではINFO以上でログを出力するのを、環境変数で調整したい、というやり方です。
.env に変数を追加
適当な値でいいですが、 project_root/.env
ファイルにLEVELを指定するための変数を追加します。
ここでは LOG_LEVEL
としました。
LOG_LEVEL=info
config/logging.php
を修正
ファイルの中身を見ると以下のようになっているかと思います。
(コメント部分と後半は省略)
'default' => env('LOG_CHANNEL', 'stack'),
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['daily'],
'ignore_exceptions' => false,
],
'single' => [
'driver' => 'single',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
],
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
'days' => 14,
],
...
上の例では、default=>stack
が指定されており、stackの中でchannels=>daily
が指定されています。
そしてdailyのlevel=>debug
になっているため、DEBUG以上のログが出力されることになります。
そこで、この daily=>levelの部分を以下のように書き換えます。
'level' => env('LOG_LEVEL','debug'),
あとは環境に合わせて、先程 .env
に追加した LOG_LEVEL
の値を変更してやれば、環境ごとに合わせたログレベルでログが出力されます。
ログレベルの一覧は PSR-3でこのように定義されていて 記載されている順番の並びで、指定したレベルより上に書かれている内容が出力されることになります。
Laravelのバージョンいくつから使えるのかまでは調査していません(4.2と5.1のあと6.0に飛んだだめ…)が、config/logging.php
の中身が同じような状態であれば使える方法かと思います。
なにか他にもっと簡単な切り替え方があるような気はするんですが、 .env
にはじめから設定されている値はLOG_CHANNEL
だけで、別にチャンネル切り替えるつもりは無いんだけど、レベルだけ切り替えるやり方というのが見当たらなかったのでやってみました。
「本来はこうするべき」というやり方がありましたら教えていただけると嬉しいです。