Wie drucke ich den Inhalt eines Arrays in einer Protokolldatei?

18

Wie drucke ich Array-Inhalte in eine Protokolldatei in Magento CE 1.7, ohne eine Schleife zu durchlaufen?

Sukeshini
quelle

Antworten:

26
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 nullder Fall, wird es vor dem Array-Dump hinzugefügt.
Der dritte Parameter der Zend_Debug::dump()Mittelwerte echo. Wenn dies der trueFall ist, wird das Dump-Ergebnis als Echo ausgegeben, wenn dies der falseFall ist , wird es als String zurückgegeben. In deinem Fall musst du es sein false.

Marius
quelle
Vielen Dank. Es hat perfekt funktioniert. Ich denke, Sie haben das Komma zwischen den Parametern der Funktion print_r verpasst. Stattdessen gab es einen Punkt.
Sukeshini
@ Su123 Ja ... das habe ich gesehen. Es ist jetzt behoben
Marius
6
Sie sollten das print_rhier nicht brauchen , Magentos Logger wird Arrays und Objekte automatisch erweitern
Alan Storm
Wenn Sie auf der Verwendung bestehen, ist die Verwendung print_rmöglicherweise die bessere Wahl Zend_Debug::dump($var).
Pspahn
@ Alan Storm: Danke. Ich habe Ihren Vorschlag getestet. Das funktioniert einwandfrei.
Sukeshini
11

Haben Sie versucht, nur zu tun:

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

Die Mage-Log-Methode sollte das Array selbst erweitern.

Petar Dzhambazov
quelle
Vielen Dank. Es funktionierte. Ich weiß nicht, warum es früher nicht funktioniert hat, als ich nachschaue.
Sukeshini
8

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 :-)

Fabian Blechschmidt
quelle
Du hast Recht. Ich habe den Code getestet. Wenn wir wie Mage :: log ('my string'. $ Array) setzen; Dies wird 'my stringArray'
Sukeshini