Laravel開発をスムーズに！Blink Loggerで楽々デバッグ！

![lbl_image.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52879/bbcce13a-fda2-076b-cfc4-64599ccde1e3.jpeg)

## Laravel Blink Logger

https://github.com/ucan-lab/laravel-blink-logger

- Laravel Blink Logger: v1.1.0 (記事公開時点)
- PHP: >=8.0.2
- Laravel: >=9.x

Laravelのクエリー、リクエスト、レスポンス、HTTPクライアントのログを出力するライブラリを作りました。
「Blink」はまばたきを意味するので、まばたきするようにログ出力をオン/オフ切り替えできるイメージでライブラリを作りました。

## 関連記事

この辺りの記事を元にライブラリを作りました。

https://qiita.com/ucan-lab/items/bfd15b096a916f811468

https://qiita.com/ucan-lab/items/7c81d568461d4026bd1b

https://qiita.com/ucan-lab/items/753cb9d3e4ceeb245341

https://qiita.com/ucan-lab/items/ef95805818b843ce5bce

## インストール

```shell
$ composer require --dev ucan-lab/laravel-blink-logger
```

`--dev` で追加すると本番環境ではそもそもライブラリがインストールされないようにできます。

### 任意: config ファイルの公開

```shell
$ php artisan vendor:publish --tag=blink-logger
```

`config/blink-logger.php` が生成されます。
特にする必要ないですが、ミドルウェアやリスナーを差し替えてカスタマイズしたい人はここから設定してみてください。

## 使い方

`.env` に有効化したいログを設定してください。
未指定の場合はログ出力しません。

```
LOG_QUERY_ENABLED=true
LOG_HTTP_REQUEST_ENABLED=true
LOG_HTTP_RESPONSE_ENABLED=true
LOG_HTTP_CLIENT_REQUEST_ENABLED=true
LOG_HTTP_CLIENT_RESPONSE_ENABLED=true
```

設定は以上です！
あとはリクエスト叩いたり、クエリーを実行して出力を確認してください！

こんな感じでログが出力されます。

```
$ tail -f storage/logs/laravel.log
```

```
[2024-04-05 16:38:58] local.DEBUG: GET: http://example-app.test/api/foo/bar?baz=qux {"request":{"baz":"qux"},"headers":{"accept-language":["ja,en-US;q=0.9,en;q=0.8"],"accept-encoding":["gzip, deflate"],"accept":["text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"],"user-agent":["Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"],"upgrade-insecure-requests":["1"],"cache-control":["max-age=0"],"connection":["keep-alive"],"host":["example-app.test"]}} 
[2024-04-05 16:38:58] local.DEBUG: START TRANSACTION  
[2024-04-05 16:38:59] local.DEBUG: 4.01 ms, SQL: insert into `users` (`name`, `email`, `email_verified_at`, `password`, `remember_token`, `updated_at`, `created_at`) values ('Concepcion VonRueden Sr.', 'judy30@example.net', '2024-04-05 16:38:58', 'y$L7Lb.DoH7sO5Zb7RrGtSzelx6Y15gBtetVYlI4z4wB5I83oh6To1i', 'ZD34nR26LH', '2024-04-05 16:38:59', '2024-04-05 16:38:59');  
[2024-04-05 16:38:59] local.DEBUG: 3.02 ms, SQL: update `users` set `name` = 'change name', `users`.`updated_at` = '2024-04-05 16:38:59' where `id` = 122;  
[2024-04-05 16:38:59] local.DEBUG: 1.61 ms, SQL: delete from `users` where `id` = 122;  
[2024-04-05 16:38:59] local.DEBUG: 2.28 ms, SQL: insert into `users` (`name`, `email`, `email_verified_at`, `password`, `remember_token`, `updated_at`, `created_at`) values ('Delfina Brakus IV', 'anibal.cummings@example.org', '2024-04-05 16:38:59', 'y$L7Lb.DoH7sO5Zb7RrGtSzelx6Y15gBtetVYlI4z4wB5I83oh6To1i', 'Qvq73GjdiQ', '2024-04-05 16:38:59', '2024-04-05 16:38:59');  
[2024-04-05 16:38:59] local.DEBUG: COMMIT  
[2024-04-05 16:38:59] local.DEBUG: 2.15 ms, SQL: select * from `users` where `users`.`id` = 123 limit 1;  
[2024-04-05 16:38:59] local.DEBUG: 200 OK {"body":"{\"data\":\"ok\"}","headers":{"cache-control":["no-cache, private"],"date":["Fri, 05 Apr 2024 16:38:59 GMT"],"content-type":["application/json"],"x-ratelimit-limit":["60"],"x-ratelimit-remaining":["55"],"access-control-allow-origin":["*"]}} 
```

## 今後の予定

`substituteBindingsIntoRawSql` を使いたいので、`v2.x` ではLaravel `10.15.0` 以降をサポートしたいと思います。

https://github.com/ucan-lab/laravel-blink-logger/pull/25

## Q&A

### Laravel Telescope でええやん？

それはそう。
クエリー、リクエスト、レスポンス、HTTPクライアントをただログに吐き出すだけをしたかった。