laravel 使用事件监听sql

创建监听

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

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值