laravel 如何监控所有的 sql 操作

原创 Laravel
阅读数: 1527 2023年03月30日

在 Laravel 中,您可以通过设置 DB::listen() 闭包函数来监听所有 SQL 查询操作,这个函数会在每次 SQL 查询执行之前触发。在闭包函数内部,您可以记录 SQL 查询的语句、绑定参数、执行时间等相关信息,从而实现对所有 SQL 查询操作的监控。下面是一个例子:

\DB::listen(function ($query) {
    // 记录 SQL 查询语句和执行时间
    Log::debug($query->sql);
    Log::debug($query->time);

    // 记录 SQL 查询绑定参数
    if (!empty($query->bindings)) {
        Log::debug($query->bindings);
    }
});

上面的例子将 SQL 查询语句、执行时间以及绑定参数记录在日志文件中,您可以根据实际需求进行修改。在应用程序中加入这段代码之后,每次执行 SQL 查询操作时,都会将相应信息记录到日志中,以便您进行监控和分析。

另外,您也可以使用一些 Laravel 的第三方扩展包,例如 laravel-debugbarlaravel-query-monitor 等来监控 SQL 查询操作,它们提供了更加方便的可视化界面来展示查询的详细信息。


通常将 DB::listen() 函数放在 AppServiceProvider 的 boot() 方法中可以确保在应用启动时监听所有的 SQL 查询操作。当然您也可以将其放在其他服务提供者中,只要在应用启动时被调用即可。
下面是一个示例,假设您已经在 AppServiceProvider 中注册了 Log 服务提供者:

use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        DB::listen(function ($query) {
            // 将查询语句和执行时间写入日志
            Log::debug($query->sql);
            Log::debug($query->time);
        });
    }

    // ...
}

这样,在每次应用启动时,DB::listen() 函数会被调用,将所有的 SQL 查询操作写入日志中,方便您进行监控和分析。


目前我想在管理后台的时候记录sql日志,就不放在 AppServiceProvider,放在 Admin 操作 __constuct() 或 中间件。

phpriji.cn | 网站地图 | 沪ICP备17015433号-1