Как записывать запросы SQL в файл журнала с помощью CakePHP

У меня есть приложение CakePHP 1.2, которое делает несколько вызовов AJAX, используя объект AjaxHelper. AjaxHelper вызывает функцию контроллера, которая затем возвращает некоторые данные обратно на страницу.

Я хотел бы регистрировать запросы SQL, которые выполняются функциями контроллера AJAX. Обычно я просто устанавливаю уровень отладки на 2 в config / core.php, однако это нарушает мою функциональность AJAX, потому что это приводит к тому, что выходные SQL-запросы добавляются к выходным данным, которые возвращаются на стороне клиента.

Чтобы обойти эту проблему, я хотел бы иметь возможность записывать любые запросы SQL в файл журнала. Какие-либо предложения?

2 ответа

Решение

Я нашел хороший способ добавить эту функцию регистрации по этой ссылке:

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 файл конфигурации, чтобы использовать новый драйвер, который вы только что создали.

Это фантастический способ отладки таких вещей, как https://github.com/cakephp/debug_kit

Другие вопросы по тегам