Wie drucke ich Array -Inhalte in der Protokolldatei?
-
16-10-2019 - |
Frage
Wie drucken Sie Array -Inhalte in eine Protokolldatei in Magento CE 1.7, ohne eine Schleife durchzusetzen?
Lösung
Mage::log(print_r($arr, 1), null, 'logfile.log');
Hinzufügen eines zweiten Parameters zu print_r Gibt eine Zeichenfolge mit gedruckter Variable zurück.
BEARBEITEN
Basierend auf den folgenden Kommentaren fühle ich mich verpflichtet, andere Optionen für die Protokollierung 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 ein Etikett. Wenn dies nicht der Fall ist null
Es wird vor dem Array -Dump hinzugefügt.
Der dritte Parameter von Zend_Debug::dump()
meint echo
. Wenn es true
Dann wird das Dump -Ergebnis wiederholt, wenn es so ist false
Es wird als Zeichenfolge zurückgegeben. In Ihrem Fall müssen Sie es sein false
.
Andere Tipps
Haben Sie versucht, nur zu tun:
Mage::log($array, null, 'logfile.log', true);
Die Magierprotokollmethode sollte das Array It selbst erweitern.
Wie Petar betonte, wird es erweitert. Wenn es sich also um ein Array oder ein Objekt handelt, ist kein Print_r erforderlich. Aber wenn Sie es mischen, wie:
Mage::log('my string' . $array);
Sie erhalten ein Problem, da PHPS -Array zur String -Konvertierung bedeutet:
array(... whatever...) -> 'String'
Und mit einem Objekt versucht PHP, die __toString -Methode aufzurufen, wenn dies nicht vorhanden ist, wird ein Fehler geworfen (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 :-)