
【Laravel】Log入門
2021/11/21
はじめまして!ヨコイと申します。
今回はLaravelのLogに関して書いていきたいと思います。
バグを未然に防いだり、保守のためにログを読んでアプリケーションの状態を把握するということは重要です。
Laravelにはログを出力するための豊富な機能が揃っております。
基本の設定
Laravelのログの設定はconfig/logging.php
というファイルにまとめられております。
このファイルの中には複数のログチャンネル(ログの出力方法のようなもの)というものが定義されており、その中から選択して使用します。(デフォルトではstack
チャンネルが選択されます。stack
チャンネルはこの設定では一つのログファイルにログを集約するsingleチャンネルを設定したログチャンネルです。)
各チャンネルに関する設定もconfig/logging.php
の各チャンネルに記載します。
<?php
use Monolog\Handler\NullHandler;
use Monolog\Handler\StreamHandler;
use Monolog\Handler\SyslogUdpHandler;
return [
'default' => env('LOG_CHANNEL', 'stack'),
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['single'],
'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,
],
'slack' => [
'driver' => 'slack',
'url' => env('LOG_SLACK_WEBHOOK_URL'),
'username' => 'Laravel Log',
'emoji' => ':boom:',
'level' => 'critical',
],
........
];
設定方法
デフォルトのstack
チャンネルではかなり可読性が悪くなってしまうのでチャンネルを変えたいと思います。
おそらく多くの現場で開発環境用の環境変数を用意してそちらを読み込む方法が一般的かと思いますので.env
にてチャンネルを指定する方法を説明します。といってもかなり簡単です。.env
ファイルに下記を追記します。もしくは修正します。
LOG_CHANNEL=daily
このように追記することで先ほど説明したlogging.phpに定義されたdailyチャンネルが使用されます。(簡単ですね!)
よく使う(であろう)daily
チャンネルについて説明します。
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
'days' => 14,
],
daily
チャンネルにはdays
というオプションがあります。
デフォルトでは14が設定されていますが、これは14日分のログファイルが保存されるということです。この値を0に設定するとログファイルが削除されることはありません。
dailyチャンネルの他にもslackにメッセージを送信するチャンネルなど便利そうなものも揃っているので、使ってみる機会があった場合には追記していきたいと思います。
ログの出力
ログファサードを使ってログに書き込むことも可能です。
use Illuminate\Support\Facades\Log;
public function logInset($message){
Log::debug($message);
}
以下、出力例
[2021-10-17 09:24:02] testing.DEBUG: {"foo":"bar"}
またログにはレベルが存在します。
emergency > alert > critical > error > warning > notice > info > debug
重要度の高い順に左から並んでいます。
まとめ
開発時にはあらゆる場面でログが活用されるので、ログの設定をカスタマイズすることはかなり重要だと捉えています。
開発効率を上げられるよう、学習していきたいですね。