Laravel の ログの簡単な設定について

目次

ログ

開発中や本番稼動時にエラーやバグが発見された時に役立つ「ログ」というものに今回は注目してみようと思います。

もしご自身で先に公式ドキュメントをご覧になられる方は下のリンクから眺めてみてください。
Loggingー 公式ドキュメントです。英語なので、英語が苦手な方は下の翻訳されたものをご覧ください。
ログ ー 有志が翻訳してくれているものです。

対象となる方

  • Laravel学習中の方
  • ログって何?という方

ログってなんだ?

ログって何?という話ですが、物凄くシンプルに捉えると「システムの操作内容を記録したもの」でいいかと思います。誰が、いつ、どんな操作をしたのかが分かるものです。
では、なぜそのような操作履歴を残しておく必要があるのか?
なぜかというと、エラーやバグが発生した時にログを辿っていくと原因が分かったり、そのエラーを再現することができるようになるからです。
このエラーの発見、再現というのがとても重要で、よくネタにされる「何もしてないけど動かんくなった^^;」(そんなわけないやろ案件)という時に真っ先にログを見て、再現して、プログラムの修正に取り掛かるということが良くあります。
そういった観点から、適切に必要なログを残しておくのは重要で、後々自分を助ける事になりますのできちんと設定しておきましょうね!

Laravelのログ

Laravelを使う際のログの残し方について見ていきましょう。
実は初期の段階でも、ログが出力されるようになっています。
どこ? → storagelogsの中にlaravel.logというファイルが作られます。Laravelインストール時は何もありません。

ただ、初期の設定のままですと1つのファイル内に延々とログを残し続けますので数千、数万行のログデータの中から該当の箇所を探すのに時間がかかりますし、何より古いログデータは自動的に消されていってしまいます。

出力するログの種類

チャンネル

configディレクトリ内のlogging.phpファイルを見ると初期で用意されている種類(チャンネル)の確認ができます。主要なものを順に見ていきましょう!

  • stack – 初期で設定されているチャンネル。マルチチャンネルを設定する時に便利です。初期設定では single というチャンネルが設定されています。
  • single – 単一ファイルにログを残していくチャンネル。
  • daily – 日毎にファイルを切り替えてログを残していくチャンネル
  • slack – チャットアプリ slack にログメッセージを送信するチャンネル

他にもpapertrail,stderr,syslog,errorlog,null,emergencyといったものがありますが、詳しくは公式ドキュメントをご覧ください。

レベル

次にログのレベルについても触れておきます。Laravelのログは、RFC5424仕様で定義されているすべてのログレベルを提供しています。
emergencyalertcriticalerrorwarningnoticeinfodebug の8種類です。
Logファサードを使うとログを書き込むことができます。

use Illuminate\Support\Facades\Log;

Log::emergency($message);
Log::alert($message);
Log::critical($message);
Log::error($message);
Log::warning($message);
Log::notice($message);
Log::info($message);
Log::debug($message);

設定を変えてみよう

設定方法としては先ほど閲覧した logging.phpファイルを書き換えても大丈夫ですし、.envファイルから既存のチャンネルを指定してもいいかと思います。
具体的には以下のようにします。まずはlogging.phpファイルを編集する場合

'channels' => [
    'stack' => [
        'driver' => 'stack',
        'channels' => ['syslog', 'slack'],
    ],

    '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' => 'critical',
    ],
],

何をしたかというと、stackチャンネルの中のチャンネルをdailyslackの2つに設定したという感じです。daily として出力される場合は、先ほど確認した laravel.log というファイルではなく、laravel-2021-05-14.logといった形で日付が付与されて保存されます。また、daily の設定項目を見ていただくと、'days' => 14となっているかと思います。これは14日分のログファイルを保管しておくという設定で、必要な期間をご自身で設定することも可能です。
ログとして出力されるかどうかですが、これは設定されたレベルによって決まります。daily側は .env側での設定がなければ debug となっています。またslack側は critical となっています。それぞれのレベルに合わせて出力されますね。

今回は各チャンネルのカスタマイズまではしませんが、自分が残したいログをある程度自由に実装することができるので、一度色々やって見てください。
今回は以上です!

よかったらシェアしてね!

この記事を書いた人

Web Developer / Educator