Laravel開発でのSQLログを取る
LaravelでSQL実行ログを取るには、 \DB::listenのリスナーを自前で登録してログを取る等が可能であるが、容易にライブラリで実現出来る物があるので紹介
※ Laravel5.6、ライブラリのバージョンはv2.0.3で確認
導入方法
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;