Open1

Laravel logging周り

mesh1nek0x0mesh1nek0x0

前提知識

ログレベルについて理解があること。info、warn、errorとか。

cf. rfc5424
https://datatracker.ietf.org/doc/html/rfc5424

本題

基本的な思想

ログ 8.x Laravel
https://readouble.com/laravel/8.x/ja/logging.html#building-log-stacks

まず初めに、ファイルに書き込むだけがログではない、そこを留意しておきたい。
出力先はコンソール画面だったり、メールやSlack通知も記録には違いないからだ。
システムの記録に関して、入力があって、それをどこに出力するかを扱っているのがこのログというものだということを頭の片隅に入れておきながら読むと、いろいろイメージしやすいかもしれない。

さて、大きな概念としてchannel(チャンネル)というものがあり、チャンネルごとに出力に関する設定を保持している。この出力に関する設定にも、使用するログライブラリ(driver)、出力先や出力フォーマット、出力するログレベルといった概念がある。
※driverというのは少しわかりにくいかもしれないが、同様にファイルに吐き出すというログライブラリAとBがあった場合に、それを切り替える。文字通り出力先に運んでくれるdriverを変えられる、とイメージすると言葉が脳に染み込むかもしれない。

このchannelの設定を細かく指定することで、出力する内容は同じだけどフォーマットを変えたり、

基本channelの出力は1つであり、使用するdriverを1つ設定することになる。ただ、同じ出力を複数のチャンネルに同時に配信したいことは度々ある。(ログに書き出すし、Slackにも通知する)そこで出力を複数設定できるstackという特殊なdriverも存在する。
これをdriverにすることで、複数出力が可能なchannelも作成することができる。

↓のテレビの例えがとてもしっくりきたのでイメージしやすいかも。

TVでいう多チャンネル同時視聴。
cf. 【laravel 8.x】Logging の設定とログフォーマットの実装方法【基本編】 - Qiita
https://qiita.com/mabasasi/items/be4b073b91433275a42c

※Laravelのアプリを動かすときに、.envなどでLOG_CHANNELを指定すると、指定のchannelでログが出力されることになる。
e.g. stderrが指定されていれば、stderr channelの内容に従ってログ出力される。