Ответ 1
Если вы находитесь в режиме разработчика, вы можете попробовать, если объект поддерживает отладочный вывод через $object->debug()
.
Этот вопрос является общим, и я просто хотел бы знать, как сбрасывать объекты в файлы журналов. Чтобы прояснить ситуацию, я прорабатываю пример.
Я успешно использовал 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');
}
Идентификатор отгрузки печатается в файле журнала просто отлично, но, очевидно, он не сбрасывает объект так, как я его хочу, поскольку код, который я написал, неверен.
Может ли кто-нибудь сказать мне, как я мог бы сбросить объект в файл журнала и, возможно, дать мне несколько советов по регистрации в целом?
Большое спасибо.
Если вы находитесь в режиме разработчика, вы можете попробовать, если объект поддерживает отладочный вывод через $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()
работать, вы также можете использовать функцию PHP core error_log
для регистрации. Это то, что я иногда делаю, если мне нужен только быстрый журнал.
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() doc) или использовать альтернативный маршрут с serialize().