laravel记录接口执行的所有sql到日志文件

发布时间:2023-01-09 22:43:16 阅读:916次

在开发过程中,我们的接口会出现响应速度慢的问题。可能引起的原因是网络IO、服务器CPU处理速度慢、硬盘IO慢、代码复杂度高、数据库慢sql等原因引起,需要先排除清楚原因。在排查慢sql的过程中,需要记录sql的执行条数,执行的秒数,sql的复杂度进行分析,下面是laravel框架记录每次接口请求的所有sql记录。
1、找到app/Providers/EventServiceProvider文件

2、在boot方法中添加以下代码:

 /**
     * Register any events for your application.
     *
     * @return void
     */
    public function 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);
                Log::info(' execution time: ' . $query->time . 'ms; ' . $tmp . "\n\t");
            }
        );
    }

实测结果:

如有问题,可以QQ搜索群1028468525加入群聊,欢迎一起研究技术

支付宝 微信

有疑问联系站长,请联系QQ:QQ咨询

转载请注明:laravel记录接口执行的所有sql到日志文件 出自老鄢博客 | 欢迎分享