Как печатать содержимое массива в файле журнала?
-
16-10-2019 - |
Вопрос
Как печатать содержимое массива в файл журнала в Magento CE 1.7 без итерации через петлю?
Решение
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
.
Другие советы
Вы пытались сделать просто:
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) {
}
}
Ничего не протестировано :-)