监听数据库语句
使用 DB::listen 方法来监听数据库查询语句。
php
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Database\Events\QueryExecuted;
class AppServiceProvider extends ServiceProvider
{
// ...
/**
* Bootstrap any application services.
*/
public function boot(): void
{
if (app()->isLocal()) {
\Illuminate\Support\Facades\DB::listen(
fn (\Illuminate\Database\Events\QueryExecuted $e) => logger($e->toRawSql())
);
}
}
}php
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
public function boot(): void
{
if (app()->isLocal()) {
\Illuminate\Support\Facades\DB::listen(function (\Illuminate\Database\Events\QueryExecuted $query) {
$sql = $query->sql;
$bindings = $query->bindings;
// 简单的替换(适用于简单场景)
foreach ($bindings as $binding) {
$value = is_numeric($binding) ? $binding : "'{$binding}'";
$sql = preg_replace('/\?/', $value, $sql, 1);
}
\Log::info($sql, ['time' => $query->time . 'ms']);
});
}
}
}