Laravelで使える便利なデバッグ方法② | 株式会社スタイラジーの「居心地の良い」ブログ

株式会社スタイラジーの「居心地の良い」ブログ

会社の事や仕事の事、
その他イベントなど、
色々な話題を思うがままに
株式会社スタイラジー社員
の日常を紹介します。

株式会社スタイラジーの
「居心地の良い」ブログ、
2008年1月7日スタート!

今回はLaravelで使える便利なデバッグ方法と言いますか、基本的なと言いますか、
ログを出力することによるデバッグ方法について紹介したいと思います。
どちらかというと、こちらを①にして先に公開するべきでした、、、

前回の記事 Laravelで使える便利なデバッグ方法①

ログ出力

デバッグに限らず、監視等いろんな場面で使用されるログですから、
Laravelにおける使い方もかなり簡単になっています。

\Log::error($error_message);

と書くだけで、ログレベルが error のログを出力することが可能です。

use Illuminate\Support\Facades\Log;

という一文を書いて Logファサードをインポートした上で

Log::error($error_message);

としても大丈夫です。


さて、ここで2つ気になる点が出てきます。
ログレベル って何?ということと、ログはいったいどこに出力されるのかということです。
まずはログの出力先について確認していきましょう。

ログの出力先は config/logging.php で管理されています。

特に何もしていなければ config/logging.php の設定の中に、

'default' => env('LOG_CHANNEL', 'stack'),

という箇所があると思います。
これは何を意味しているかというと、ログのデフォルト設定は環境変数(.env)の LOG_CHANNEL で管理していて、
環境変数に LOG_CHANNEL が存在しない場合は config/logging.php に記載されている stack の設定を使いますという意味になります。

では、早速 .env に LOG_CHANNEL の設定があるかどうかを確認してみましょう。

 



ありましたね。
LOG_CHANNELstack で、LOG_LEVELdebug となっています。
ということで、私のLaravel環境のログ設定がわかりました。

LOG_CHANNEL については、 config/logging.php の中に設定がありますので、確認してみます。



channels の記述の中に stack という設定がありますが、その設定内で再び channels が設定されており、daily が設定されています。
たらい回し感が出てきてますが根気よく daily の設定を確認すると、新しい情報が出てきました。 

path、level、days の3つの設定です。
これら、それぞれどういう意味かと言いますと

 ・driver:どういった形式でログを出力するかを指定。この場合、日付付きのファイルで日次でログが出力されます
 ・path:ログファイルの出力先を指定
 ・level:デフォルトのログ出力レベルを指定。環境変数(.env)の LOG_LEVEL 設定がない場合は debug が適用されます
 ・days:ログの出力日数を指定。この場合、最新から14日分は保持し、15日以降分は削除されます

という内容です。

まず path から確認していくと、 storage_path("{$dir}/laravel.log") と書かれています。
storage_pathstorage ディレクトリの完全パスを返す関数なのですが、引数が与えられた場合は、
storage ディレクトリ配下に引数のファイルパスがあると仮定して、storage ディレクトリの完全パスを返してくれるものです。
今回の指定内容だと、 storage/logs/laravel.log というパスにログが出力されることになります。

days は上記で説明した通り、ログを何日分保持するかというものです。
single の場合は同じファイルにログを出力し続けるので、days の指定がありません。

最後に level です。
これは冒頭に出てきたログレベルを指定するもので、設定内容としては、
環境変数(.env)LOG_LEVEL がなければ debug が設定されているとみなす、というもので、
先ほど確認した通り、.env には LOG_LEVEL があり debug が指定されていましたので、
私の環境ではログレベル debug が設定されていることになります。

そして、何のためにログレベルを設定するのかというと、
Laravelには次の8種のログレベルが用意されており、

emergency
alert
critical
error
warning
notice
info
debug

上から順に緊急度が高い(重要)と判断するのですが、
ログレベルの設定は、どのレベル以上のログを出力するのかを設定しているというものです。
従って、ログレベルに debug が設定されていると、全てのログが出力されることになります。

例えば、開発環境では debug を設定し、本番環境では error を設定、
という感じで環境ごとに設定を変えて、出力するログをコントロールするといった使い方があります。

次のように記述すると、ログレベルごとにログを出力できるのですが、

 ※ログレベルごとの出力方法



 ※ログレベルごとの出力例



開発環境では debug を設定し、本番環境では error を設定ということをやっておくと、
本番環境では、下の4つは出力されないということになります。
あまりやりませんが、デバッグ用のログを debug レベルで出力するようにプログラムに記述していれば、
本番環境がログレベル error の場合は、デバッグ用のログ出力コードを消さなくても大丈夫(影響なし)だったりします。

あとは、重要なログだけ出力するようにして、ログが出力されたらslackに通知する等、監視に使うこともありますね。

余談ですが、ログ出力には以下のような書き方もありますので、参考にしてください。





では、また!

 

 

◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇

マイナビ2023 説明会予約受付中!

チューリップ赤チューリップ紫是非チェックしてみてくださいねチューリップピンクチューリップオレンジ

(株)スタイラジーのインターンシップ・会社概要 | マイナビ2023(株)スタイラジーの会社概要ページです。マイナビ2023は、(株)スタイラジーのインターンシップ情報や企業情報で、自己分析や企業研究をサポートします。リンクjob.mynavi.jp

◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇