Laravel Blink Logger
- Laravel Blink Logger: v1.1.0 (記事公開時点)
- PHP: >=8.0.2
- Laravel: >=9.x
Laravelのクエリー、リクエスト、レスポンス、HTTPクライアントのログを出力するライブラリを作りました。
「Blink」はまばたきを意味するので、まばたきするようにログ出力をオン/オフ切り替えできるイメージでライブラリを作りました。
関連記事
この辺りの記事を元にライブラリを作りました。
インストール
$ composer require --dev ucan-lab/laravel-blink-logger
--dev
で追加すると本番環境ではそもそもライブラリがインストールされないようにできます。
任意: config ファイルの公開
$ 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
以降をサポートしたいと思います。
Q&A
Laravel Telescope でええやん?
それはそう。
クエリー、リクエスト、レスポンス、HTTPクライアントをただログに吐き出すだけをしたかった。