0
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?

LaravelのLog levelと記録されるファイルについて

Posted at

はじめに

Laravelに移行する作業をしていた際に、「Logのレベルにはどのような違いがあるのか?errorやalertはどんな場面で使うべきなのか?」や「Log::warning()を使用した場合、どのファイルにメッセージが出力されるのか?」といった疑問が出てきたので、調べた内容をまとめてみました。

LaravelのLog levelとレベル感

Laravelのドキュメントによると、Log levelはRFC5424に基づいているようです。そのページから抜粋するとこのようになっていました。

Severity
            Code

             0       Emergency: system is unusable
             1       Alert: action must be taken immediately
             2       Critical: critical conditions
             3       Error: error conditions
             4       Warning: warning conditions
             5       Notice: normal but significant condition
             6       Informational: informational messages
             7       Debug: debug-level messages

 では実際にどんな時にどのレベルでログを出せばいいのか?を調べてみると、こんな感じに分けられます。

Level 意味
Emergency システムが使用不可能 サーバがダウンした、致命的なエラーが発生した
Alert すぐに対処が必要 DB接続が失敗した、重要なサービスが失敗した
Critical 重大なエラーが発生した アプリケーションの重要な機能が動作していない
Error エラーが発生した APIレスポンスエラー
Warning 警告メッセージ ディスク容量が少なくなっている
Notice 通常の動作&通知するイベント ユーザが新しいアカウントを作成した、メールが送信された
Informational 動作の情報 アプリケーションの状態やプロセスの進行状況
Debug デバッグ 変数の値や関数の戻り値

メッセージの出力先

 次にどのファイルにログが出力されるように設定しているのかを確認します。Laravelではlogging.phpにメッセージを出力するログファイル、ログのフォーマット、ログレベルなどを設定できます。
例えば下のような設定であったとしたら、logging.phpにはalertレベルとinfoレベルのログファイルの設定しかされていません。では、Log::warning();をするとどのファイルに出力されるのでしょうか?

<?php

declare(strict_types=1);

return [
   'default' => env('LOG_CHANNEL', 'info'), 
   'channels' => [
       'info' => [
           'driver' => 'single',
           'path' => storage_path('logs/info.log'),
           'level' => 'info',
       ],
       'alert' => [
           'driver' => 'single',
           'path' => storage_path('logs/alert.log'),
           'level' => 'alert',
       ],
   ],
];

この場合、デフォルトのチャンネルがinfo, そしてinfoチャンネルのレベルはinfoに設定されているので、info.logに出力されます。
infoレベルの場合、info以上(info, notice, warning, error, critical, alert, emergency)のレベルのメッセージが記録されます。alert.logはalertレベル以上のメッセージしか記録されないので、Log::warning()のメッセージは記録されません。

'info' => [
           'driver' => 'single',
           'path' => storage_path('logs/info.log'),
           'level' => 'info',
       ],

Log::debug()をコードに仕込んでもどのファイルにも出力されない、ということですね...

最後に

もしかしたら設定次第ではどこにも出力されないLogが存在してるかも...?と思うと、もっとlogging.phpとLogのレベルに注意を払っていこうと感じました。
参考になれば幸いです🍎

参考

0
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
0
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?