Відповіді:
Mage::log(print_r($arr, 1), null, 'logfile.log');
Додавання другого параметра до print_r поверне рядок із надрукованою змінною.
[EDIT]
на підставі коментарів нижче я відчуваю зобов’язання запропонувати інші варіанти для входу в масив масиву.
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) {
}
}
Нічого не перевірено :-)