そこそこお仕事で忙しかったみたいです。Railsな案件→VBAな案件→CakePHPな案件と渡り歩いてます。
本題に移ると、まぁタイトルの通りなのですが、CakePHPでクエリのログをファイルに簡単に吐けないの?設定をチョロっといじるだけで出来たりしないの?と思い調べました。
結果としてちょっとしたコード書けば出来ることがわかったので書きました。
http://kwski.net/cakephp-2-x/1064/を参考にやれば終わりです。
だとエントリとしてちょっとあれなので、少しアレンジします。
参考サイトだとMySQLですが、今回対応したのはPostgreSQLです。でもやってることは同じです。
あと、クエリのみ出力と詳細出力を切り替えれるようにしてます。
MySQLの場合はPostgresになってるとこをMySQLに書き換えたら動くと思います。
1. カスタムしたdatasourceを作成
/app/Model/Datasource/Database/PostgresLog.php
のような名前で作成します。名前は何でも良いです。
対象のdatasourceを継承したクラスを作ります。
<?php App::uses('Postgres', 'Model/Datasource/Database'); class PostgresLog extends Postgres { function logQuery($sql, $params = array()) { parent::logQuery($sql); $logLevel = Configure::read('Cake.logQuery'); switch ($logLevel): case 1: $this->log($sql, LOG_DEBUG); // SQLクエリーのみ break; case 2: $this->log($this->_queriesLog, LOG_DEBUG); // SQLの実行詳細 break; endswitch; } } ?>
2. 使用するdatasourceを変更
/app/Config/database.php
のdatasourceの指定を以下のように1で作成したクラスの名前に変更します。
'datasource' => 'Database/Postgres', 'datasource' => 'Database/PostgresLog',
3. 出力するフラグを設定
/app/Config/core.php
で以下のように設定します。1を指定するとSQLのみ、2を指定すると詳細、それ以外を指定するか、未指定だと出力しません。
// クエリログを出力する(1: SQLのみ, 2: 詳細, other: なし) Configure::write('Cake.logQuery', 1);
と、こんな感じでコードを書いておくとデバッグが捗るんじゃないでしょうか。
0 件のコメント:
コメントを投稿