我只想记录速度慢的SQL查询,其中慢速由任何超过我指定值的查询确定。这可能吗?我该如何启用它?
DBProfiler工作得非常好,但似乎总是输出到屏幕而不是文件:
array( //db profiler
'class'=>'ext.db_profiler.DbProfileLogRoute',
'countLimit' => 1, // How many times the same query should be executed to be considered inefficient
'slowQueryMin' => 0.1, // Minimum time for the query to be slow
),
我如何插入DBProfiler或者以其他方式插入,这样每次查询都很慢时我都可以写一些写入application.log的内容?
答案 0 :(得分:2)
在db组件配置中的config / main.php中,将enableParamLogging和enableProfiling参数设置为true,并确保:
'log'=>array(
'class'=>'CLogRouter',
'routes'=>array(
array(
'class'=>'CFileLogRoute',
'levels'=>'error, warning',
),
// uncomment the following to show log messages on web pages
array(
'class'=>'CWebLogRoute',
),
),
),
是这样的。更多信息CDbConnection和CLogRouter
答案 1 :(得分:1)
尝试dbprofiler扩展。我会帮助你...
答案 2 :(得分:0)
我最终编写了自己的日志功能:
private function slowQueryEvaluator($startTime, $endTime, $identifier) {
$MAX_TIME = 0.1;
$IP = Controller::getRealIpAddress();
$userID = -1;
if (isset(YII::app()->user->id)) {
$userID = YII::app()->user->id;
}
$seconds = $endTime - $startTime;
if ($seconds > $MAX_TIME ) {
YII::log($IP.' - '.$userID.' - '.$seconds.' seconds - '.$identifier);
}
}