我有一个CakePHP 1.2应用程序,它使用AjaxHelper对象进行大量的AJAX调用。 AjaxHelper调用一个控制器函数,然后将一些数据返回给页面。
我想记录AJAX控制器函数执行的SQL查询。通常,我只是在config / core.php中将调试级别调为2,但是,这会破坏我的AJAX功能,因为它会导致输出SQL查询附加到返回给客户端的输出。
要解决此问题,我希望能够将执行的任何SQL查询记录到日志文件中。有什么建议吗?
答案 0 :(得分:5)
我找到了一种在此链接添加此日志记录功能的好方法:
http://cakephp.1045679.n5.nabble.com/Log-SQL-queries-td1281970.html
基本上,在cake/libs/model/datasources/dbo/
目录中,您可以创建您正在使用的dbo的子类。例如,如果您正在使用dbo_mysql.php数据库驱动程序,那么您可以创建一个名为dbo_mysql_with_log.php
的新类文件。该文件将包含以下行中的一些代码:
App::import('Core', array('Model', 'datasource', 'dbosource', 'dbomysql'));
class DboMysqlWithLog extends DboMysql {
function _execute($sql) {
$this->log($sql);
return parent::_execute($sql);
}
}
简而言之,这个类修改(即覆盖)超类的_execute
函数,以便在执行通常所做的任何逻辑之前记录SQL查询。
您可以修改app/config/database.php
配置文件以使用刚刚创建的新驱动程序。
答案 1 :(得分:1)
这是调试此类事件的绝佳方式,https://github.com/cakephp/debug_kit