Как записывать запросы 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