CakePHP跟踪消耗资源查询

时间:2016-01-14 12:57:14

标签: sql cakephp logging cakephp-2.5 cakephp-2.x

我需要跟踪我的CakePHP 2.5.2应用程序执行此查询的位置(由DebugKit报告):

SELECT COUNT(*) AS count FROM sometable WHERE status = 1

我找到了一个引用表的模型,也许它在其他地方被引用。

除了寻找模型或运行每个可能的PHP脚本以查找我的CakePHP应用程序中的查询来源之外,还有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

您可以扩展Mysql类并覆盖logQuery(),以便使用您选择的日志记录机制记录每个请求。

示例:

  1. 创建文件/app/Model/Datasource/MysqlLog.php并添加以下内容:

    App::uses('Mysql', 'Model/Datasource/Database');
    
    class MysqlLog extends Mysql {    
    
        function logQuery($sql, $params = []) {
            parent::logQuery($sql);
            Debugger::log("sql[{$this->_queriesCnt}]: $sql");
        }
    }
    
  2. 通过修改/app/Config/database.php

    ,指示CakePHP使用新课程
    public $default = array(
        'datasource' => 'Database/MysqlLog',
        'persistent' => true,
        'host' => 'localhost',
        'login' => 'my_login',
        'password' => 'my_pass',
        'database' => 'my_db',
    );
    
  3. 请求将记录到/app/tmp/logs/debug.log

    基于Vladimir Bilyov的帖子Logging sql queries into file in CakePHP 2