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'], 'logVars'=>[], //表示以yii\db\或者app\models\开头的分类都会写入这个文件 'categories'=>['yii\db\*','app\models\*'], //表示写入到文件 'logFile'=>'@runtime/../runtime/logs/sql_'.date('y_m_d').'.log', ],
然后可以在runtime/logs/ 找到mysql日志