创建监听
php artisan make:listener DbSqlListener
DbSqlListener.php
<?php
namespace App\Listeners;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Database\Events\QueryExecuted;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\DB;
class DbSqlListener
{
/**
* Create the event listener.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Handle the event.
*
* @param object $event
* @return void
*/
public function handle(QueryExecuted $event)
{
DB::listen(function (QueryExecuted $event){
$sql = $event->sql;
$bindings = $event->bindings;
$time = $event->time;
//给参数加引号
$bindings = array_map(function ($binding){
if(is_string($binding)){
return "'$binding'";
}elseif($binding instanceof \DateTime){ //如果是时间类型,也要转换
return $binding->format("''Y-m-d H:i:s");
}
return $binding;
},$bindings);
$sql = str_replace('?','%s',$sql);
$sql = sprintf($sql,...$bindings);
// $sql = vsprintf($sql,$bindings); 方法二
// dd($sql);
Log::info('sql log',['sql'=>$sql,'time'=>$time]);
});
}
}
注册事件
EventServiceProvider.php
protected $listen = [
Registered::class => [
SendEmailVerificationNotification::class,
],
QueryExecuted::class =>[
DbSqlListener::class //注册事件监听sql日志
],
];
查看日志目录
tail -f storage/logs/laravel.log