MySQL Query Logging в CakePHP - PullRequest
       29

MySQL Query Logging в CakePHP

4 голосов
/ 24 мая 2009

Я хотел знать, есть ли способ регистрировать запросы mysql в CakePHP, выполняемые при использовании метода find на моделях, я знаю, что запросы к базе данных rails, так что Cake делает то же самое, если да, то как я могу включить это или использовать?

Шив

Ответы [ 5 ]

6 голосов
/ 24 мая 2009

Эта страница содержит инструкции о том, как заставить Cake регистрировать запросы так же, как и рельсы.

4 голосов
/ 13 января 2012

Очень простой метод для регистрации всех выполняемых запросов:

в вашем торте \ libs \ model \ datasources \ dbo \ dbo_mysql.php

найти функцию _execute :

function _execute($sql) {
        return mysql_query($sql, $this->connection);
}

добавить строку " $ this-> log ($ sql); " перед " вернуть mysql_query ($ sql, $ this-> connection); "

function _execute($sql) {
    $this->log($sql);
    return mysql_query($sql, $this->connection);
}

Вот и все !!!!! Все ваши SQL-запросы регистрируются. Убедитесь, что файл журнала настроен правильно и имеет достаточные разрешения. Наслаждайтесь

1 голос
/ 06 мая 2011

Это то, что я использую (поместите его в папку элементов, затем включите в макет)

<?php
    ob_start(); 
    echo $this->element('sql_dump');
    $out = ob_get_contents();
    ob_end_clean();
    CakeLog::write('mysql' , $out);
?>

тогда вы найдете файл mysql.log в TMP.logs.DS.mysql.log

1 голос
/ 01 апреля 2011

CakePHP 1.3 использует для этого элемент sql_dump.
Вы можете использовать элемент напрямую, когда Configure::read('debug') установлен на 2:

echo $this->element('sql_dump');

Или взять его код напрямую, если вам нужно что-то сделать с ним (например, повторить его из ShellTask)

$sources = ConnectionManager::sourceList();

$logs = array();
foreach ($sources as $source):
    $db =& ConnectionManager::getDataSource($source);
    if (!$db->isInterfaceSupported('getLog')):
        continue;
    endif;
    $logs[$source] = $db->getLog();
endforeach;

Эхо с напр. :

print_r($logs)
1 голос
/ 24 мая 2009

Предполагая, что вы используете nix os, на самом деле лучшим подходом будет сам журнал MySQL.
Из этого вы можете узнать некоторые интересные вещи.

вход в Ubuntu при установке из репозитория

tail -f  /var/log/mysql/mysql.log

Как упоминалось ниже, это огромный фактор снижения производительности (ну, все журналы имеют некоторое влияние на производительность). Поэтому убедитесь, что вы используете его только на своих устройствах dev / QA и только в течение коротких периодов времени на своей рабочей машине.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...