laravel & yii2 开启mysql 日志 方法

laravel 和yii2 都是基于模型查询数据库,开发调试过程中往往需要知道当前执行了哪些sql语句,以便查找问题和调试

1、laravel 开启mysql日志

打开 app/Providers/AppServiceProvider.php 

在boot方法增加监听

public function boot()
{
    if ($this->app->environment() === "local") {//判断是local环境才开启,以免影响生成的性能
        \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\n\t");

        });
 
    }
}

然后storage/logs查看日志

 

2、yii2开启mysql 日志

在config/web.php找到 组件components 配置

在log组件配置增加

            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',

                    'levels' => ['error', 'warning','info'],

                    'logVars'=>[],                    //表示以yii\db\或者app\models\开头的分类都会写入这个文件

                    'categories'=>['yii\db\*','app\models\*'],                    //表示写入到文件

                    'logFile'=>'@runtime/../runtime/logs/sql_'.date('y_m_d').'.log',
                ],

 

 

 

然后可以在runtime/logs/ 找到mysql日志

 

posted @ 2022-05-11 19:05  i金少  阅读(384)  评论(0编辑  收藏  举报