在 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-debugbar
、
laravel-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() 或 中间件。