Як надрукувати вміст масиву у файлі журналу?


Відповіді:


26
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. Натомість тут була повна зупинка.
Сукешині

@ Su123 Так ... Я це бачив. Це зараз виправлено
Маріус

6
Тут вам не знадобиться print_r, реєстратор Magento автоматично розгортає масиви та об’єкти
Alan Storm

Якщо ви наполягаєте на використанні print_r, кращим вибором може бути використання Zend_Debug::dump($var).
pspahn

@Alan Storm: Дякую Я перевірив вашу пропозицію. Це прекрасно працює.
Сукешині

11

Ви намагалися зробити просто:

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

Метод журналу Mage повинен розширити масив, який він сам.


Дуже дякую. Це спрацювало. Я не знаю, чому це не спрацювало раніше, коли я перевіряю.
Сукешині

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 ('мій рядок'. $ Array); це надрукує 'my stringArray'
Сукешині,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.