東京うぇ部

PHPをメインにしたプログラム情報共有サイト

CakePHP

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モードを変えて・・とか面倒な事がなくなりますね。

コメントを残す




このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事