laravel框架中如何记录执行的每条sql语句?
在App\Providers\AppServiceProvider.php中boot方法中记录:
DB::listen(function ($query) {
$tmp = str_replace('?', '"'.'%s'.'"', $query->sql);
$qBindings = [];
foreach ($query->bindings as $key => $value) {
if (is_numeric($key)) {
$qBindings[] = $value;
} else {
$tmp = str_replace(':'.$key, '"'.$value.'"', $tmp);
}
}
$tmp = vsprintf($tmp, $qBindings);
$tmp = str_replace("\\", "", $tmp);
//$query->time 是sql语句执行的时间
Log::info('execution time:'.$query->time.'ms; '.$tmp."\n\n\t");
});
这样就可以在日志中查看执行的每条sql语句了。