モデルでfindメソッドを使用するときに実行されるCakePHPでmysqlクエリをログに記録する方法があるかどうかを知りたかったので、レールデータベースクエリを知っていました。どのように私はそれを有効にするか、それを使用することができますか?MySQLクエリのCakePHPへのログイン
シブ
モデルでfindメソッドを使用するときに実行されるCakePHPでmysqlクエリをログに記録する方法があるかどうかを知りたかったので、レールデータベースクエリを知っていました。どのように私はそれを有効にするか、それを使用することができますか?MySQLクエリのCakePHPへのログイン
シブ
あなたはnixのOS上にあると仮定すると、最善のアプローチは、実際には最後尾にmysqlのは、自分自身が記録されます。
あなたはそれからいくつかの興味深いことを学ぶかもしれません。後述するように、リポジトリ
tail -f /var/log/mysql/mysql.log
からインストールする際のUbuntuで
ログは、これは巨大な性能キラー(ウェル、すべてのログは、いくつかのパフォーマンスに影響を持っている)です。ですから、あなたのdev/QAマシンでのみ、また本番機では短期間だけ使用してください。
This pageには、Cakeがレールと同じようにクエリをログに記録する方法が記載されています。
CakePHP 1.3では、sql_dump
要素が使用されています。
$sources = ConnectionManager::sourceList();
$logs = array();
foreach ($sources as $source):
$db =& ConnectionManager::getDataSource($source);
if (!$db->isInterfaceSupported('getLog')):
continue;
endif;
$logs[$source] = $db->getLog();
endforeach;
(のようなShellTaskからそれをエコー)
echo $this->element('sql_dump');
それともあなたはそれで何かを行う必要がある場合、それは直接コードです取る:
あなたはConfigure::read('debug')
が2に設定されている要素を直接使用することができます例えばと
エコー:
print_r($logs)
これは私が使用するものである(あなたのレイアウトに含めるその要素のフォルダに入れて)
<?php
ob_start();
echo $this->element('sql_dump');
$out = ob_get_contents();
ob_end_clean();
CakeLog::write('mysql' , $out);
?>
、あなたはTMP.logs.DS.mysql.log
でmysql.logファイル、実行中のすべてのクエリをログに記録することは非常に簡単な方法でしょう。あなたのケーキに
を\ LIBS \モデル\データソース\ DBO \
dbo_mysql.php _EXECUTE機能を見つける:
function _execute($sql) {
return mysql_query($sql, $this->connection);
}
行に「$ this-> log($ sql);」という行を追加します。 "before" return mysql_query($ sql、$ this-> connection);それだ「
function _execute($sql) {
$this->log($sql);
return mysql_query($sql, $this->connection);
}
!!!!!あなたのすべてのSQLクエリが記録されます。ログファイルが正しく設定され、十分な権限を持っていることを確認します。私たちのように、
直接変更するのは悪い習慣ですコアのCakePHPコード。このメソッドは避けなければなりません。もしCakeの振る舞いをあなたのappディレクトリに変更したいのなら。 – drmonkeyninja
CakePHPのからそれをログに記録する方法をお楽しみくださいません$ this-> log – Shiv
をデフォルトで使用してください。これは巨大なパフォーマンスキラーであるため、mysql.logは無効になっています。my.cnfから無効にし、dev。環境でのみ行う必要があります。 – duckyflip