Ответы:
Mage::log(print_r($arr, 1), null, 'logfile.log');
Добавление второго параметра в print_r вернет строку с напечатанной переменной.
[РЕДАКТИРОВАТЬ]
на основе комментариев ниже, я чувствую себя обязанным предложить другие варианты для записи массива
Mage::log($arr, null, 'logfile.log');
или если вам нужен строковый префикс к массиву
Mage::log('prefix'.Zend_Debug::dump($arr, null, false), null, 'logfile.log');
Второй параметр Zend_Debug::dump()
- это метка. Если это не так, null
он будет добавлен до дампа массива.
Третий параметр Zend_Debug::dump()
означает echo
. Если это так, true
то результат дампа будет отражен, если false
он будет возвращен в виде строки. В твоем случае тебе это нужно false
.
print_r
здесь, регистратор Magento будет автоматически расширять массивы и объекты
print_r
, лучшим выбором может быть использование Zend_Debug::dump($var)
.
Вы пытались сделать просто:
Mage::log($array, null, 'logfile.log', true);
Метод журнала Mage должен расширять массив самостоятельно.
Как указал Петар, он расширяется, поэтому, если это массив или объект, print_r не требуется. Но если вы смешаете это, как:
Mage::log('my string' . $array);
Вы получаете проблему, потому что преобразование массива phps в строку означает:
array(... whatever...) -> 'String'
И с объектом php пытается вызвать метод __toString, если его не существует, выдается ошибка (я думаю).
И для справки Mage::log()
:
\Mage::log
/app/Mage.php:784
public static function log($message, $level = null, $file = '', $forceLog = false)
{
// ...
// initialize ... blah stuff...
// check wether logging is on, developer mode or logging is forced
try {
// get the file, define the format... more stuff ... blah ...
if (is_array($message) || is_object($message)) {
$message = print_r($message, true);
}
$loggers[$file]->log($message, $level);
}
catch (Exception $e) {
}
}
Ничего не проверено :-)