Laravel サーバサイド

Laravelのログを拡張した[ファイル名、行数、日付ごと]

ログの重要性

サーバサイドの開発では、ログの解析は重要になる。

なぜなら、プログラムがどのように動いているか確認する手段だからだ。

ただ、複数のファイルでログを出力する際に、「このログはどこで出力されているのか?・・」と言ったことを考えるのは時間が勿体無い

Monologを言うライブラリ

phpにはMonologと言うライブラリがある。

簡単に言うと、ログを自分の好きなようにカスタマイズできる物である。

今回はこれを使って、ログの出力をカスタマイズしてみました。

フォルダ構成

編集しないと行けないファイル

  • logging.php (ログの設定を行うファイル)

作成しないと行けないファイル

  • app/Logging/LogFormatter.php (ログの出力を編集するファイル)
  • app/Logging/LogProcessor.php (ログの出力内容を拡張するファイル)

Logging.phpの編集

Laravelでは"config/logging.php"でログの出力方式を管理しています。

logging.phpは"channels"と言うキーの中に、ログの出力方法をまとめている。

各channelには"driver"と言う、実際にログを出力するプログラムを指定したり、

"path"と言う、どこにログファイルを出力するかを指定したり、

"level"と言う、どのレベル以上でログの出力を可能にするか指定したり

など色々できる。

今回は、"daily"と言うchannelを使うことで、ログを日付ごとに出力できるようにした。

また、ログの拡張をするために、"tap"というキーを指定して、拡張先のクラスファイルを配列形式で上の例のように指定しました。

LogProcessor.phpとLogFormatter.phpについて

Monologにはログで出力する内容を拡張するプロセッサーや、ログの出力内容を編集するフォーマッターがある。

今回は、出力元ファイル名と行数をログに出力するために、"IntrospectionProcessor"を使い、

ログの出力内容を編集するために"LineFormatter"を使います。

詳しくはvendor/monolog/monolog/src/Monolog/以下にいろんなプロセッサーやフォーマッターがあるので確認してみてください。

_invokeメソッドで渡された、logging(ログ設定の変数)に設定した、プロセッサーやフォーマッターを代入するとログを拡張できる。

ログ出力のテスト

実際に、ログが日付、出力元、行数を含んでいるか確認する。

テスト用コントローラ

ルーティング

実際に/test-logにアクセスした結果

ちゃんと日付と出力元、行数の後に結果が出力されているのを確認できる。

まとめ

  • logging.phpにログに関する設定をまとめられている
  • tapと言うキーでログを拡張するプロセッサーやフォーマッターを指定できる
  • IntrospectionProcessorではログの出力元や行数をログに出力してくれる
  • LineFormatterでは、ログで出力する内容を整形できる
  • この記事を書いた人

シロー

Webシステムの開発のお仕事をさせて頂いております。 フリーランスの日常、Web開発に関する情報を発信しています。 趣味はゲーム、映画鑑賞、個人サービスを作ることです。

-Laravel, サーバサイド
-,

© 2021 Shiro's secret base