Current Location: Home> Latest Articles> How to Use Middleware in Laravel for Database Query and Performance Monitoring

How to Use Middleware in Laravel for Database Query and Performance Monitoring

M66 2025-06-19

How to Use Middleware in Laravel for Database Query and Performance Monitoring

When developing web applications, database query logging and performance monitoring are essential. Laravel provides a powerful middleware mechanism to help developers handle these tasks. Middleware allows you to execute logic before a request reaches the controller or after the response is sent back to the user. In this article, we'll explore how to implement database query logging and performance monitoring using Laravel middleware.

1. Create Middleware

First, we need to create middleware. Run the following command to create a middleware named `QueryLogMiddleware`:

php artisan make:middleware QueryLogMiddleware

This command will generate a file named `QueryLogMiddleware.php` under the `app/Http/Middleware` directory. Now, we can write the middleware logic in this file.

2. Implement Database Query Logging

To log database queries, we can use Laravel's DB facade in the `handle` method of the middleware to retrieve all SQL queries and log them to a log file. Here's an example of the code:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\DB;

class QueryLogMiddleware
{
    public function handle($request, Closure $next)
    {
        // Enable query logging
        DB::connection()->enableQueryLog();

        $response = $next($request);

        // Get query log
        $queries = DB::getQueryLog();

        foreach ($queries as $query) {
            // Log each query
        }

        return $response;
    }
}

In the above code, we first enable the query logging feature by calling `DB::connection()->enableQueryLog()`. Then, after the request passes through the middleware chain, we retrieve the query log using `DB::getQueryLog()` and iterate over the queries to log them.

3. Add Performance Monitoring

In addition to logging database queries, we can also use middleware to implement performance monitoring. For example, we can use the Laravel Debugbar package to monitor the application's response time. Here's a sample code:

<?php

namespace App\Http\Middleware;

use Closure;
use Barryvdh\Debugbar\Facade as Debugbar;

class PerformanceMiddleware
{
    public function handle($request, Closure $next)
    {
        $start = microtime(true);

        $response = $next($request);

        $end = microtime(true);
        $executionTime = $end - $start;

        // Add performance monitoring data
        Debugbar::addMeasure('Execution Time', $start, $end);

        return $response;
    }
}

In this code, we use the Debugbar facade to add a performance measure called "Execution Time" and calculate the execution time of the request. You can also add other performance metrics such as database query counts, memory usage, and more.

4. Register Middleware

Next, we need to register these middleware in the application. Open the `app/Http/Kernel.php` file and add the following code to the `$middlewareGroups` property:

protected $middlewareGroups = [
    'web' => [
        // Other middleware...
        \App\Http\Middleware\QueryLogMiddleware::class,
        \App\Http\Middleware\PerformanceMiddleware::class,
    ],
];

This will add the `QueryLogMiddleware` and `PerformanceMiddleware` to the web middleware group, meaning they will execute during web requests.

5. Use Middleware

Now, we can use these middleware in any route or controller method in the application. For example, in the `routes/web.php` file, we can use the middleware like this:

Route::middleware(['query.log', 'performance'])->group(function () {
    // Route definitions...
});

This example demonstrates how to apply middleware to a route group. You can also apply middleware to individual routes or controller methods.

Conclusion

By using Laravel's middleware feature, we can easily add database query logging and performance monitoring to our applications. As shown above, we created a `QueryLogMiddleware` to log database queries and a `PerformanceMiddleware` to monitor application performance. These middleware are simple to register and use but significantly enhance the observability and maintainability of your applications.