php var_dump ($ object) или print_r ($ object) в файл журнала

Этот вопрос является общим, и я просто хотел бы знать, как сбрасывать объекты в файлы журналов. Чтобы прояснить ситуацию, я прорабатываю пример.

Я успешно использовал magento-наблюдателей для вызова методов, когда происходят определенные события. Например, я наблюдаю за тем, когда отгрузка сохраняется через:

<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'); } 

Идентификатор отгрузки печатается в файле журнала просто отлично, но, очевидно, он не сбрасывает объект так, как я его хочу, поскольку код, который я написал, неверен.

Может ли кто-нибудь сказать мне, как я могу сбросить объект в файл журнала и, возможно, дать мне несколько советов по регистрации в целом?

Огромное спасибо.

Solutions Collecting From Web of "php var_dump ($ object) или print_r ($ object) в файл журнала"

Если вы находитесь в режиме разработчика, вы можете попробовать, если объект поддерживает отладочный вывод через $object->debug() .

 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 ); 

Чтобы иметь возможность использовать Mage::log() , необходимо выполнить некоторые условия:

  • для режима разработчика необходимо установить значение true
  • регистрация должна быть активирована в конфигурации системы.

Но вы также можете принудительно выполнить регистрацию, передав true как 4-й параметр в Mage::log() .

Если все условия выполнены (или принудительное вхождение в журнал), вы должны найти свой файл журнала в var/log/shipping.log .

В качестве побочного примечания: объекты Magento имеют тенденцию быть огромными и обычно содержат тонны информации, которые вам обычно не нужны для ведения журнала / отладки.

Вы можете уменьшить количество сбрасываемой информации с помощью метода getData() , члена всех объектов Magento, расширяющих Varien_Object :

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

Вы также можете сбрасывать отдельные атрибуты, используя соответствующий метод getter:

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

Если вам действительно нужны полные дампы объектов, я бы рекомендовал использовать метод debug() объекта для регистрации данных (этот метод автоматически определяет рекурсии, что помогает избежать бесконечных циклов, израсходованных на всю память):

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

Если вы не можете заставить Mage::log() работать, вы также можете использовать функцию error_log PHP для регистрации. Это то, что я иногда делаю, если мне нужен только быстрый журнал.

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

Возможно, вы использовали бы функцию var_export (), а именно:

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

Также глобальные функции нельзя вызывать непосредственно в строке с двойными кавычками. В вашем случае Mage::log(var_export($shipment, 1) . '------', null, 'shipments.log') было бы нормально, я думаю. )

Если объект, который вы пытаетесь выполнить дамп, содержит циклические ссылки, var_export () не удастся. Затем вы можете использовать var_dump + ob_start / ob_flush combo (на странице документа var_dump () есть несколько примеров) или использовать альтернативный маршрут с функцией serialize () .