SQLクエリーをログに出力する

SQLのクエリーをデバッグするには、Debug Kitを使用すればできますが、デバッグログと一緒に出したいのでやり方を調査してみました。
別々のログやビューでみるのもいいですが、秒単位で実行される処理もどちらが先に実行されたのかなどわかりやすくなるので、いいかなと個人的に思っています。
明示的に実行SQLをデバッグする
モデル操作(find, save, deleteなど)の後に以下のコードを挿入すると実行SQLを(デバッグ)ログに出力させることができます。
$this->log( $this->[Model]->getDataSource()->getLog(), LOG_DEBUG);
出力先は自由に設定して下さい。
暗黙的に実行SQLをデバッグする
DataSourcesをオーバーライドさせます。
MySQLの場合
1. MysqlLog.phpを作成(名前は自由に)
// \app\Model\Datasource\Database\MysqlLog.php <?php App::uses( 'Mysql', 'Model/Datasource/Database'); class MysqlLog extends Mysql { function logQuery( $sql, $params = array()) { parent::logQuery( $sql); if (Configure::read('Cake.logQuery')) { $this->log( $this->_queriesLog, LOG_DEBUG); // SQLの実行詳細 // $this->log( $sql, LOG_DEBUG); // SQLクエリーのみ } } } ?>
2. datasourceを変更
// \app\Config\database.php // 'datasource' => 'Database/Mysql', 'datasource' => 'Database/MysqlLog',
3. 出力するフラグを設定
出力させるさせないを設定します。以下を追加すると出力されるようになります。
// \app\Config\core.php Configure::write( 'Cake.logQuery', 1);
上記を削除すれば、出力させなくできます。
参考
Vladimir Bilyov - Logging sql queries into file in CakePHP 2
関連記事
-
-
日付・時間のバリデーション
日付や時刻に関するバリデーションは以下のルールがビルトインされています。 date 日付 time 時刻 datetime 日時 (m:「月」を数字表記 / M:「月」を英語表記)
-
-
ネストしたリストを出力「nestedList」
DBやJSONからデータを取得して、そのデータをもとにメニュー表示などネストしたリストを出力させたい場合に「nestedList」が便利です。 ヘルパーに渡すデータは連想配列である必要があります。(
-
-
パス定数と変更方法やURLの取得
CakePHPは基本的にはディレクトリそのまま配置することで構築が可能ではありますが、設定パスを変更することでセキュリティに考慮した構成にすることや運用性をもたせたものにすることが可能になります。
-
-
コントローラ内でバリデーション処理を呼び出す
CakePHPでは、saveメソッドの際にバリデーション処理も自動で行われますが、save処理と切り離してバリデーションを行うこともできます。このときは、save時と若干異なる処理体系になります。
-
-
アップロードファイルのバリデーションルール
CakePHP 2.2や2.3になってファイルアップロードに対するルールがコアバリデーションに追加されているようで、まとめてみました。 コアバリデーション 関連しそうなルールは以下の4つの
-
-
FormヘルパーのMagicOption (マジックオプション)
Formヘルパーでは、「フィールド名」,「テーブルカラムのデータ型」もしくはモデルの「バリデーション設定」によりフォーム要素を決定したり、自動で属性を付与する「マジックオプション」と呼ばれるものがある
-
-
Formヘルパーのinputタグのdiv/labelなどの設定
Formヘルパーのinputではデフォルトでは以下のようにdivで囲われて、labelが付与されて出力されます。 CSSのフレームワークなどであらかじめ決まったスタイルがある場合に便利に作られていま
-
-
独自のバリデーションルールを作成
CakePHPで組み込みバリデーションルールをつくる方法は、正規表現を定義する方法と独自メソッドを定義する方法の2つがあるようです。 参考 Custom Validation Rules 正規
-
-
Jsヘルパーを使用してAjax更新
更新処理でページ遷移を伴う場合、ページ全体をレスポンスするのに対して、Ajax処理ではページの一部のレスポンスが可能となるためサーバからの通信量を抑えることが可能となります。デモ head
-
-
RSSフィードの取得
コンロトーラ public function getrssfeed() { try { $newsItems = $this->Rss->read( 'http://
- PREV
- WYSIWYGエディタを実装
- NEXT
- Twenty Twelve 投稿日・投稿者を非表示に
Comment
“CakePHP 2.x | SQLクエリーをログに出力する” http://t.co/5UN8AQQM0Z
CakePHP 2.x | SQLクエリーをログに出力する http://bit.ly/1gIixep