mamun2074 / laravel-query-logger
Advanced query logger for Laravel with N+1 detection, slow query highlighting and route-based filtering
Installs: 2
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/mamun2074/laravel-query-logger
Requires
- php: >=7.1
- illuminate/support: ^5|^6|^7|^8|^9|^10|^11
This package is not auto-updated.
Last update: 2026-01-11 21:32:00 UTC
README
A lightweight Laravel query logger package that logs route-wise SQL queries, detects N+1 problems, and highlights slow queries โ without any web UI overhead.
Designed for local & staging debugging, not production.
โจ Features
- Route-wise SQL query logging
- Exact SQL with bindings
- Total query count & execution time
- Slow query detection
- N+1 query detection
- ENV-controlled
- File-based logging (no UI)
- Laravel auto-discovery support
๐ซ What This Package Does NOT Do
- No web UI / dashboard
- No production monitoring
- No query modification
- No framework hacks
๐ฆ Installation
composer require mamun2074/laravel-query-logger
โ๏ธ Configuration
Publish config file:
php artisan vendor:publish --tag=query-logger-config
Environment variables:
QUERY_LOGGER=true QUERY_SLOW_MS=100 N_PLUS_TYPE=raw
๐งช Usage
Call any route that executes DB queries:
GET /api/v1/users/1
Logs will be written to:
storage/logs/query-logger/YYYY-MM-DD.log
๐ Sample Log Output
{
"url": "http:\/\/localhost\/api\/public\/api\/v1\/login",
"method": "POST",
"query_count": 10,
"total_time": 66.79,
"slow_queries": [],
"n_plus_one": {
"select * from `oauth_clients` where `id` = ? limit ?": [
{
"sql": "select * from `oauth_clients` where `id` = 3 limit 1",
"raw": "select * from `oauth_clients` where `id` = ? limit 1",
"time": 0.61,
"file": "C:\\xampp81\\htdocs\\api\\app\\Http\\Controllers\\API\\v1\\AuthController.php:66"
},
{
"sql": "select * from `oauth_clients` where `id` = 3 limit 1",
"raw": "select * from `oauth_clients` where `id` = ? limit 1",
"time": 0.31,
"file": "C:\\xampp81\\htdocs\\api\\app\\Http\\Controllers\\API\\v1\\AuthController.php:66"
},
{
"sql": "select * from `oauth_clients` where `id` = 3 limit 1",
"raw": "select * from `oauth_clients` where `id` = ? limit 1",
"time": 0.84,
"file": "C:\\xampp81\\htdocs\\api\\app\\Http\\Controllers\\API\\v1\\AuthController.php:66"
}
]
},
"queries": [
{
"sql": "select * from `users` where `email` = 'mahmud@gmail.com' limit 1",
"raw": "select * from `users` where `email` = ? limit 1",
"time": 55.42,
"file": "C:\\xampp81\\htdocs\\api\\app\\Http\\Controllers\\API\\v1\\AuthController.php:56"
},
{
"sql": "select exists(select * from `oauth_personal_access_clients`) as `exists`",
"raw": "select exists(select * from `oauth_personal_access_clients`) as `exists`",
"time": 1.92,
"file": "C:\\xampp81\\htdocs\\api\\app\\Http\\Controllers\\API\\v1\\AuthController.php:66"
},
{
"sql": "select * from `oauth_personal_access_clients` order by `id` desc limit 1",
"raw": "select * from `oauth_personal_access_clients` order by `id` desc limit 1",
"time": 0.35,
"file": "C:\\xampp81\\htdocs\\api\\app\\Http\\Controllers\\API\\v1\\AuthController.php:66"
},
{
"sql": "select * from `oauth_clients` where `oauth_clients`.`id` = 3 limit 1",
"raw": "select * from `oauth_clients` where `oauth_clients`.`id` = ? limit 1",
"time": 2.2,
"file": "C:\\xampp81\\htdocs\\api\\app\\Http\\Controllers\\API\\v1\\AuthController.php:66"
},
{
"sql": "select * from `oauth_clients` where `id` = 3 limit 1",
"raw": "select * from `oauth_clients` where `id` = ? limit 1",
"time": 0.61,
"file": "C:\\xampp81\\htdocs\\api\\app\\Http\\Controllers\\API\\v1\\AuthController.php:66"
},
{
"sql": "select * from `oauth_clients` where `id` = 3 limit 1",
"raw": "select * from `oauth_clients` where `id` = ? limit 1",
"time": 0.31,
"file": "C:\\xampp81\\htdocs\\api\\app\\Http\\Controllers\\API\\v1\\AuthController.php:66"
},
{
"sql": "update `oauth_access_tokens` set `name` = 'Personal Access Token', `oauth_access_tokens`.`updated_at` = '2026-01-11 17:42:08' where `id` = 'd041ddee1fcf30a408c776ddd0628ba76ddf96682dd3a93fdbe8077f0576ca75fda7ee357df1a42d'",
"raw": "update `oauth_access_tokens` set `name` = ?, `oauth_access_tokens`.`updated_at` = ? where `id` = ?",
"time": 1.88,
"file": "C:\\xampp81\\htdocs\\api\\app\\Http\\Controllers\\API\\v1\\AuthController.php:66"
}
]
}
๐จ Important Notes
Exact file & line detection is not reliable with DB::listen.
This package logs route + controller action, which is the correct approach.
๐ Supported Versions
- PHP 7.1+
- Laravel 5+
๐ License
MIT License
๐จโ๐ป Author
Md Al-Mahmud
โญ Contributing
Pull requests are welcome.