laravel中输出sql语句到日志中

 作者:Blue

 上传时间:2017-08-21

 标签: Laravel 5.4 代码片段

在很多时候,为了方便调试代码,我们需要查看运行的sql语句到底是怎么个状况,如果把sql语句的运行结果输出到日志里面查看,那就相当方便了。
做法很简单,其实只需要在app/providers/AppServiceProvider.php的boot方法中运行一下语句就好了。为了方便管理,将是否开启记录sql进日志配置到env中。

      $log_config = env('SQL_QUERY_SAVE', 'false');
        if ($log_config) {
            //监听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'";
                        }
                    }
                }        // Insert bindings into query
                $query = str_replace(array('%', '?'), array('%%', '%s'), $sql->sql);
                $query = vsprintf($query, $sql->bindings);        // Save the query to file
                Log::info("SQL:", ['Query' => $query, 'Time' => $sql->time]);
            });
        }

然后就可以在日志中的info信息里面看见运行的sql语句了。结果如下

[2018-02-23 02:45:53] local.INFO: SQL: {"Query":"select * from `users` where `email` = '757470062@qq.com' limit 1","Time":0.52}

欢迎支付宝打赏


   常用下载
  • wkhtmltox 一款将html转换成pdf的软件,laravel有相关支持包  
  • linux一键环境OneinStack(支持lnmp,lamp)