Odpowiedzi:
Mage::log(print_r($arr, 1), null, 'logfile.log');
Dodanie drugiego parametru do print_r zwróci ciąg z wydrukowaną zmienną.
[EDYCJA]
na podstawie poniższych komentarzy Czuję się zobowiązany do zaoferowania innych opcji logowania tablicy.
Mage::log($arr, null, 'logfile.log');
lub jeśli potrzebujesz prefiksu łańcucha do tablicy
Mage::log('prefix'.Zend_Debug::dump($arr, null, false), null, 'logfile.log');
Drugi parametr Zend_Debug::dump()
to etykieta. Jeśli tak nie null
jest, zostanie dodany przed zrzutem tablicy.
Trzeci parametr Zend_Debug::dump()
średnich echo
. Jeśli tak, true
wynik zrzutu zostanie powtórzony, jeśli false
zostanie zwrócony jako ciąg. W twoim przypadku musisz tak być false
.
print_r
tutaj potrzebować , logger Magento automatycznie rozszerzy tablice i obiekty
print_r
, lepszym wyborem może być użycie Zend_Debug::dump($var)
.
Czy próbowałeś zrobić tylko:
Mage::log($array, null, 'logfile.log', true);
Metoda dziennika magów powinna samodzielnie rozszerzyć tablicę.
Jak zauważył Petar, jest on rozwinięty, więc jeśli jest to tablica lub obiekt, nie ma potrzeby print_r. Ale jeśli go wymieszasz, na przykład:
Mage::log('my string' . $array);
pojawia się problem, ponieważ konwersja tablicy phps na ciąg znaków oznacza:
array(... whatever...) -> 'String'
I z obiektem php próbuje wywołać metodę __toString, jeśli to nie istnieje, generowany jest błąd (myślę).
Dla porównania 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) {
}
}
Nic nie testowałem :-)