こんにちは、さるまりんです。
いろんな作品が掲載されているサイトがあるのですが、そこでどの作品ページが表示されたかの記録を残すことになりました。
やりたいことは
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
.....
format
とdateFormat
を指定することで実現できます。
// 日付がいるなら↓
'format' => '[%datetime%] %message%' . PHP_EOL,
'dateFormat' => 'Y-m-d H:i:s'
実際にログを記録する部分はこうです。
log::channel('work_view')->info("work_id:$workId");
チャンネルに上で作成したwork_view
を指定し、出力する文字列を渡しています。
LaravelのログはProcessor
やFormatter
を自作することでもっといろんなことができるようです。
それについては改めて書きたいと思います。
読んでくださってありがとうございました。
それではまた!