2012-04-30 13 views
12

この質問は一般的なもので、オブジェクトをログファイルにダンプする方法を知りたいだけです。物事を明確にするために、私は例を詳述しています。

特定のイベントが発生したときに、マゼンタオブザーバを使用してメソッドを呼び出すことに成功しました。 例として、私は経由して出荷を保存するときのために観察しています:

<sales_order_shipment_save_after> 

と私は正常にメソッドを呼んでいます。私は出荷を把握し、オブジェクトをログファイルにダンプするだけです。例えば。

public function newShipment(Varien_Event_Observer $observer) 
{ 
    $shipment = $observer->getEvent()->getShipment(); 
    $shipId = $shipment->getId(); 
    Mage::log("shipment ({$shipId}) created/saved", null, 'shipments.log'); 
    //trying to dump $shipment data into the log file 
    Mage::log("({var_dump($shipment)}) ------", null, 'shipments.log'); 
    Mage::log("----------------------------", null, 'shipments.log'); 
} 

出荷idがうまくログファイルに出力されますが、明らかにそれはオブジェクトに私が書いたコードは間違っているようにそれを望むようにダンプしません。

どのようにオブジェクトをログファイルにダンプすることができますか、一般的にはログに一般的なアドバイスをしてくれますか?

ありがとうございました。

var_export($shipment, 1); // to return the string without sending it to STDOUT 

また、グローバル関数は、直接二重引用符で囲まれた文字列の中に呼び出すことはできません。

答えて

8

開発者モードの場合、オブジェクトが$object->debug()でデバッグ出力をサポートしているかどうか試してみることができます。

+0

素晴らしい!ありがとうございます。$ shipment = $ observer-> getEvent() - > getShipment(); \t Mage :: log(var_export($ shipment-> debug()、TRUE)、null、 'shipments.log'); – activeDev

7

おそらく、あなたは、このように、代わりにvar_export()関数を使用すると思います。あなたの場合、 Mage::log(var_export($shipment, 1) . '------', null, 'shipments.log')は大丈夫でしょう。 )

ダンプしようとしているオブジェクトに循環参照が含まれていると、var_export()は失敗します。次に、var_dump + ob_start/ob_flushコンボ(var_dump() doc pageにいくつかの例があります)を使用するか、またはserialize()の代替ルートを使用してください。

+0

Mage :: logの呼び出しで呼び出されるvar_exportも引数として1を取る必要があります。 – ben

+0

素晴らしいコメント、ありがとうございます。 )答えを修正しました。応答のために – raina77ow

+0

ありがとう。私はあなたの答えを試して、私は期待された結果の代わりに次のエラーが表示されます: – activeDev

26
Mage::log(
    $object->debug(), //Objects extending Varien_Object can use this 
    Zend_Log::DEBUG, //Log level 
    'my.log',   //Log file name; if blank, will use config value (system.log by default) 
    true    //force logging regardless of config setting 
); 
19

Mage::log()を使用できるようにするには、いくつかの条件が満たされる必要があります。

  • 開発者モードでは、ロギングを有効にする必要がありtrue
  • に設定する必要があります。システム構成で使用します。

しかし、あなたはMage::log()trueとして第四のparamを渡すこともロギングをすることができます。

すべての条件が満たされている(またはログ記録が強制されている)場合は、ログファイルはvar/log/shipping.logである必要があります。サイドノートとして

:Magentoのオブジェクトは巨大なり、通常、あなたが通常本当に、ロギング/デバッグの目的のために必要としない情報のトンが含まれている傾向にあります。

あなたはgetData()メソッドを使用してダンプされる情報の量を減らすことができ、すべてのMagentoのオブジェクトのメンバーはVarien_Objectを拡張:

:あなたはまた、その適切なgetterメソッドを使用して、単一の属性をダンプすることができ

Mage::log(print_r($shipment->getData(), true), null, 'shipment.log', true); 

Mage::log((string) $shipment->getId(), null, 'shipment.log', true); 

完全にオブジェクトダンプが必要な場合は、オブジェクトのdebug()メソッドを使用してデータをログに記録することをおすすめします(このメソッドは自動的に行われます)。

Mage::log($shipment->debug(), null, 'shipment.log', true); 

あなたはMage::log()が仕事を得ることができない場合は、代わりにログインするためにPHPのコアerror_log機能を使用できます。すべてのメモリを食いつぶす無限ループ)を避けることができますCTS再帰。クイックログが必要な場合は、時々そうすることがあります。

error_log(print_r($shipment->getData(), true), 3, 'shipment.log'); 
+0

素晴らしいこれは素晴らしい情報です。私はちょっと新しいので、どのような礼儀がわかりません。最も包括的かつ有用な答えを提供しましたが、別のユーザーが実際にログファイルにオブジェクトを実際にダンプする手助けをしました。私はすでに答えとしてマークしています。申し訳ありませんが、愚かな質問が、私はコミュニティで行われていないものは何であるかわからない。とにかく、この返事をありがとう! – activeDev

+0

うれしかった^^。エチケットは、あなたが個人的にアップアップしたい答えと受け入れる答えがどれくらいあるかはあなた次第であると言います。 –

関連する問題