コレクションのSQLクエリをログに記録する方法は?


9

カスタムコレクションのSQLクエリをログに記録したい。次のコードを試してみました。しかし、うまくいきませんでした。任意の提案をいただければ幸いです。

Mage::log($collection->getSelect(),null,'test.log',true);

回答:


10

コレクションからSQLクエリが必要な場合は、それを文字列としてキャストする必要があります。(string)以前に作成したロギングコードに追加するだけです。

Mage::log((string)$collection->getSelect(),null,'test.log',true);

12

$Collection->printLogQuery(true);これを試して、コレクションクエリを出力します。


どうもありがとうございました。コードはクエリをインターフェイスに出力します。
すけしに2013

2

フライングマナが私に説明したように、彼のおかげで。

$collection->load($printQuery = false, $logQuery = false)

このbeforeLoadメソッドでは多くのことができるため、ロード後にクエリをログに記録または印刷することが重要です。だから最初の答え:

Mage::log((string)$collection->getSelect(),null,'test.log',true);

loadが呼び出された後に使用する必要があります。


現在のイベントを取得してMagento 1.9のログファイルに出力する方法
Gem

質問はありません。どんなイベント?
Fabian Blechschmidt

2

ステップ1:

$result_colletion = print_r($collection->getSelect());
Mage::log($$result_colletion, null, custom_collection.log,true);

ステップ2:その後、Magento管理セクションにログインし、ログ設定を有効にします。下記を参照してください 。

システム>構成>開発者>ログ設定

ステップ3:その後、var / log /フォルダーにあるログファイル「custom_collection.log」を確認します。


1
Mage::log($collection->getSelect()->__toString(), Zend_Log::DEBUG, 'test.log', true);

編集:

2番目のパラメーターとしてnull(へのフォールバックDEBUG)を使用する代わりに、次のいずれかを使用することをお勧めしますZend_Log

const EMERG   = 0;  // Emergency: system is unusable
const ALERT   = 1;  // Alert: action must be taken immediately
const CRIT    = 2;  // Critical: critical conditions
const ERR     = 3;  // Error: error conditions
const WARN    = 4;  // Warning: warning conditions
const NOTICE  = 5;  // Notice: normal but significant condition
const INFO    = 6;  // Informational: informational messages
const DEBUG   = 7;  // Debug: debug messages
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.