我想知道当我们在模型上使用find方法时,是否有办法记录CakePHP中的mysql查询,我知道rails数据库查询,Cake做的也一样,if所以我如何启用它或使用它?CakePHP中的MySQL查询日志记录
希夫
我想知道当我们在模型上使用find方法时,是否有办法记录CakePHP中的mysql查询,我知道rails数据库查询,Cake做的也一样,if所以我如何启用它或使用它?CakePHP中的MySQL查询日志记录
希夫
假设你是一个类Unix操作系统,最好的办法实际上尾MySQL日志本身。
你可能会从中学到一些有趣的东西。
日志在Ubuntu从仓库
tail -f /var/log/mysql/mysql.log
正如下面提到的安装时,这是一个巨大的性能杀手(当然,所有日志对性能有一定的影响)。因此,请确保仅在您的开发/质量保证机器上使用它,并且只在生产机器上短时间使用它。
This page有关于如何让Cake以与轨道相同的方式记录查询的说明。
CakePHP 1.3使用sql_dump
这个元素。
您可以直接使用时Configure::read('debug')
设置为2的元素:
echo $this->element('sql_dump');
或者把它的代码直接,如果你需要做别的事情与它(如回声它从一个ShellTask)
$sources = ConnectionManager::sourceList();
$logs = array();
foreach ($sources as $source):
$db =& ConnectionManager::getDataSource($source);
if (!$db->isInterfaceSupported('getLog')):
continue;
endif;
$logs[$source] = $db->getLog();
endforeach;
回声如:
print_r($logs)
这是我使用(把它放在元素文件夹,然后在您的布局)
<?php
ob_start();
echo $this->element('sql_dump');
$out = ob_get_contents();
ob_end_clean();
CakeLog::write('mysql' , $out);
?>
那么你会发现mysql.log文件中TMP.logs.DS.mysql.log
一个非常简单的方法来记录所执行的所有查询:
在蛋糕\库\型号\数据源\ DBO \ dbo_mysql.php
找到_execute功能:
function _execute($sql) {
return mysql_query($sql, $this->connection);
}
添加行“$ this-> log($ sql);“before”return mysql_query($ sql,$ this-> connection);“
function _execute($sql) {
$this->log($sql);
return mysql_query($sql, $this->connection);
}
这就是它!!!!!你的所有SQL查询得到记录。确保日志文件的配置是否正确,并有足够的权限,享受
没有办法从CakePHP的记录它,就像我们使用$ this-> log – Shiv 2009-05-23 22:25:58
默认情况下,mysql.log被禁用,因为它是一个巨大的性能杀手,你需要从my.cnf中禁用它,并且只在dev环境中这样做! – duckyflip 2009-05-24 12:22:51