Laravelのログをちょっといじる

こんにちは、さるまりんです。

いろんな作品が掲載されているサイトがあるのですが、そこでどの作品ページが表示されたかの記録を残すことになりました。

やりたいことは
1. ログファイルを分ける
2. ログ文字列の書式を変える
です。

具体的にはログファイルを分けてこんな文字列を出力するようにします。

work_view.log

work_id:000010033
work_id:002011409
.....

これを簡単にできないか?

設定と呼び出し側で文字列を作って簡単にできました。

まずは設定ファイルです。

config/logging.php

に以下を追加します。

'work_view' => [
   'driver' => 'single',
   'path' => storage_path('logs/work_view.log'),
   'level' => 'debug',
   'formatter' => Monolog\Formatter\LineFormatter::class,
   'formatter_with' => [
      'format' => '%message%' . PHP_EOL,
   ],
],

pathで出力するログのパスを指定します。これで1.の「ログを分ける」が実現できます。

2.の「ログ文字列の書式を変える」はformatterで、Monolog\Formatter\LineFormatter::class を指定し、formatter_withに書式を設定しています。上ではとてもシンプルにformatで渡された文字列のみが出力されるように指定しています。

ログに以下のように日付が欲しい場合は

[2023-04-16 08:00:03] work_id:000010033
[2023-04-16 08:02:14] work_id:002011409
.....

formatdateFormatを指定することで実現できます。

// 日付がいるなら↓
'format' => '[%datetime%] %message%' . PHP_EOL,
'dateFormat' => 'Y-m-d H:i:s'

実際にログを記録する部分はこうです。

log::channel('work_view')->info("work_id:$workId");

チャンネルに上で作成したwork_viewを指定し、出力する文字列を渡しています。

LaravelのログはProcessorFormatterを自作することでもっといろんなことができるようです。
それについては改めて書きたいと思います。

読んでくださってありがとうございました。

それではまた!