Antworten:
Mage::log(print_r($arr, 1), null, 'logfile.log');
Wenn Sie print_r einen zweiten Parameter hinzufügen, wird eine Zeichenfolge mit einer gedruckten Variablen zurückgegeben.
[BEARBEITEN]
basierend auf den Kommentaren unten fühle ich mich verpflichtet, andere Optionen zum Protokollieren eines Arrays anzubieten.
Mage::log($arr, null, 'logfile.log');
oder wenn Sie ein String-Präfix für das Array benötigen
Mage::log('prefix'.Zend_Debug::dump($arr, null, false), null, 'logfile.log');
Der zweite Parameter von Zend_Debug::dump()
ist eine Bezeichnung. Ist dies nicht null
der Fall, wird es vor dem Array-Dump hinzugefügt.
Der dritte Parameter der Zend_Debug::dump()
Mittelwerte echo
. Wenn dies der true
Fall ist, wird das Dump-Ergebnis als Echo ausgegeben, wenn dies der false
Fall ist , wird es als String zurückgegeben. In deinem Fall musst du es sein false
.
print_r
hier nicht brauchen , Magentos Logger wird Arrays und Objekte automatisch erweitern
print_r
möglicherweise die bessere Wahl Zend_Debug::dump($var)
.
Haben Sie versucht, nur zu tun:
Mage::log($array, null, 'logfile.log', true);
Die Mage-Log-Methode sollte das Array selbst erweitern.
Wie Petar betonte, wird es erweitert, sodass kein print_r benötigt wird, wenn es sich um ein Array oder ein Objekt handelt. Aber wenn Sie es mischen, wie:
Mage::log('my string' . $array);
Sie bekommen ein Problem, weil die Umwandlung von PHP-Array in String bedeutet:
array(... whatever...) -> 'String'
Und mit einem Objekt versucht PHP, die __toString-Methode aufzurufen, wenn diese nicht existiert, wird ein Fehler ausgegeben (glaube ich).
Und als Referenz 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) {
}
}
Nichts getestet :-)