PHP
laravel
laravel5.6

Laravelライブラリ探訪 - SQL実行ログを取るのに便利なライブラリ - Laravel SQL Logger

Laravel開発でのSQLログを取る

LaravelでSQL実行ログを取るには、 \DB::listenのリスナーを自前で登録してログを取る等が可能であるが、容易にライブラリで実現出来る物があるので紹介
※ Laravel5.6、ライブラリのバージョンはv2.0.3で確認

mnabialek/laravel-sql-logger

導入方法

ReadMeの通り、ライブラリのインストールと設定ファイルの配置を行う

composer require mnabialek/laravel-sql-logger --dev
php artisan vendor:publish --provider="Mnabialek\LaravelSqlLogger\Providers\ServiceProvider"

.envに以下を追加し必要に応じて調整

SQL_LOGGER_DIRECTORY="logs/sql"
SQL_LOGGER_USE_SECONDS=false
SQL_LOGGER_CONSOLE_SUFFIX=
SQL_LOGGER_LOG_EXTENSION=".sql"
SQL_LOGGER_ALL_QUERIES_ENABLED=true
SQL_LOGGER_ALL_QUERIES_OVERRIDE=false
SQL_LOGGER_ALL_QUERIES_PATTERN="#.*#i"
SQL_LOGGER_ALL_QUERIES_FILE_NAME="[Y-m-d]-log"
SQL_LOGGER_SLOW_QUERIES_ENABLED=true
SQL_LOGGER_SLOW_QUERIES_MIN_EXEC_TIME=100
SQL_LOGGER_SLOW_QUERIES_PATTERN="#.*#i"
SQL_LOGGER_SLOW_QUERIES_FILE_NAME="[Y-m-d]-slow-log"

これで、デフォルトだとstorage/logs/sqlフォルダ以下に日別でSQL実行結果のログをプレースホルダの変数を適用済みで出力してくれる。
必要に応じてスロークエリも出力できるのでシステム開発を効率的に行うことが可能

SQL実行ログの例

/* Origin (request): GET http://xxx.example.com/posts/1
   Query 2 - 2018-07-09 12:00:00 [0.45ms] */
select * from `posts` where `id` = 5 and `posts`.`deleted_at` is null limit 1;