In this article we're going to look at how you can log all database queries that are executed within your Laravel application.
There are multiple way in Laravel that help you with debugging your application, such as Debugbar and Telescope. But in this article we're going to look at using logging. As there are some cases where you may not want to use a third party package and want to quickly see what SQL queries are being executed. Such as debugging a command line script.
Default Logging
Laravel has some handle ways of logging in your application this is by using the Log
Facade. This facade allows you to
log messages to a file, database, slack, etc.
You can pair this with the Database
facade using the listen
method. This method allows you to listen for any queries
that are executed and log them to the log file.
DB::listen(function ($query) {
Log::info($query->sql, $query->bindings);
});
It's as simple as placing this inside your applications AppServiceProvider
and you'll be able to see all queries that
are executed.
Custom Log File
If you want to log all queries to a separate log file you can do this by using the useFiles
method on the Log
facade.
DB::listen(function($query) {
File::append(
storage_path('/logs/query.log'),
sprintf('[%s] %s [%s]%s%s', date('Y-m-d H:i:s'), $query->sql, implode(', ', $query->bindings), PHP_EOL, PHP_EOL)
);
});
This will log all queries to the storage/logs/query.log
file.