CakePHPでSQLクエリをログに保存

CakePHPでアプリ開発保守を行っていると

ログを見たい時ってありますよね。

ただ、本番稼働中だとdebug値を容易には変えられません。

そこで、Cakeで用意されているdbo↓

app/model/dbo/dbo_postgres_log.php

を継承したクラスを作ってログを保存するように。


前提条件
CakePHP1.3
Postgres8.3



# touch app/model/dbo/dbo_postgres_log.php


継承ファイルを作成して


uses ('model' . DS . 'datasources' . DS . 'dbo' . DS . 'dbo_postgres');
class DboPostgresLog extends DboPostgres {

	var $queryNo = 1;

	function execute ($sql) {
	    $ret = parent::execute($sql);

	    if (defined('LOG_SQL') && LOG_SQL) {
	        $this->log(sprintf("%d. %s", $this->queryNo, $sql), LOG_DEBUG);
	        $this->queryNo++;
	    }
	    return $ret;
	}
}


こちらの内容を記載します。


んで作成したdboファイルを利用するように設定します。


# vi app/config/database.php
'driver' => 'postgres',
↓
'driver' => 'postgres_log',


最後にログ制御定数を設置します。


# vi app/config/core.php
define('LOG_SQL', true);


これで、

app/tmp/logs/debug.php

こちらにsqlログが格納されるようになったかと思います。


いちいち、社内のみdebugモードを変えて・・とか面倒な事がなくなりますね。

おすすめ記事


コメントを残す




Menu

HOME

 TOP