如何使用CakePHP将SQL查询记录到日志文件中

时间:2011-01-18 06:18:59

标签: mysql cakephp cakephp-1.2

我有一个CakePHP 1.2应用程序,它使用AjaxHelper对象进行大量的AJAX调用。 AjaxHelper调用一个控制器函数,然后将一些数据返回给页​​面。

我想记录AJAX控制器函数执行的SQL查询。通常,我只是在config / core.php中将调试级别调为2,但是,这会破坏我的AJAX功能,因为它会导致输出SQL查询附加到返回给客户端的输出。

要解决此问题,我希望能够将执行的任何SQL查询记录到日志文件中。有什么建议吗?

2 个答案:

答案 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