larave5.8记录运行时产生的所有sql
前言
记录运行时产生的所有sql记录,包括select和update等。适用于无法定位到执行的代码段,通过sql反向查找。
实现
- 编辑文件 larvel\app\Providers\EventServiceProvider.php
- 在boot函数中加入记录代码
/**
*
* Register any events for your application.
*
* @return void
*/
public function boot()
{
parent::boot();
if (env('APP_DEBUG')) {
//sql调试
DB::listen(function ($sql) {
foreach ($sql->bindings as $i => $binding) {
if ($binding instanceof \DateTime) {
$sql->bindings[$i] = $binding->format('\'Y-m-d H:i:s\'');
} else {
if (is_string($binding)) {
$sql->bindings[$i] = "'$binding'";
}
}
}
$query = str_replace(['%', '?'], ['%%', '%s'], $sql->sql);
$query = vsprintf($query, $sql->bindings);
Log::alert('sql_log',['sql=>'.$query]);
});
}
}
测试
在laravel\storage\logs\laravel.log中出现sql日志