Как распечатать содержимое массива в файле журнала?

18

Как напечатать содержимое массива в файл журнала в magento CE 1.7 без повторения цикла?

Sukeshini
источник

Ответы:

26
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. Вместо этого была полная остановка.
Sukeshini
@ Su123 Да ... Я видел это. Это исправлено сейчас
Marius
6
Вам не нужно print_rздесь, регистратор Magento будет автоматически расширять массивы и объекты
Alan Storm
Если вы настаиваете на использовании print_r, лучшим выбором может быть использование Zend_Debug::dump($var).
pspahn
@ Алан Шторм: Спасибо. Я проверил ваше предложение. Работает отлично.
Sukeshini
11

Вы пытались сделать просто:

Mage::log($array, null, 'logfile.log', true);

Метод журнала Mage должен расширять массив самостоятельно.

Петар Джамбазов
источник
Большое спасибо. Это сработало. Я не знаю, почему это не сработало раньше, когда я проверяю.
Sukeshini
8

Как указал Петар, он расширяется, поэтому, если это массив или объект, 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) {
    }
}

Ничего не проверено :-)

Фабиан Блехшмидт
источник
Ты прав. Я проверил код. Если мы поместим как Mage :: log ('моя строка'. $ Массив); это напечатает 'мой stringArray'
Sukeshini