Come stampare il contenuto dell'array nel file di registro?


18

Come stampare il contenuto dell'array in un file di registro in magento CE 1.7 senza iterare attraverso un ciclo?

Risposte:


26
Mage::log(print_r($arr, 1), null, 'logfile.log');

L'aggiunta di un secondo parametro a print_r restituirà una stringa con variabile stampata.
[EDIT] in
base ai commenti qui sotto mi sento obbligato a offrire altre opzioni per la registrazione di un array.

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

o se è necessario un prefisso stringa per l'array

Mage::log('prefix'.Zend_Debug::dump($arr, null, false), null, 'logfile.log');

Il secondo parametro di Zend_Debug::dump()è un'etichetta. In caso contrario null, verrà aggiunto a prima del dump dell'array.
Il terzo parametro di Zend_Debug::dump()medie echo. In tal caso, trueil risultato del dump verrà ripetuto, in caso falsecontrario verrà restituito come stringa. Nel tuo caso ne hai bisogno false.


Grazie. Ha funzionato perfettamente. Penso che tu abbia perso la virgola tra i parametri della funzione print_r. Invece c'è stato un punto fermo.
Sukeshini,

@ Su123 Sì ... l'ho visto. Ora è stato risolto
Marius

6
Non dovresti aver bisogno del print_rqui, il logger di Magento espande automaticamente array e oggetti
Alan Storm,

Se insisti nell'usare print_r, una scelta migliore potrebbe essere quella di usare Zend_Debug::dump($var).
pspahn,

@Alan Storm: grazie. Ho testato il tuo suggerimento. Funziona perfettamente.
Sukeshini,

11

Hai provato a fare solo:

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

Il metodo di log del mago dovrebbe espandere l'array da solo.


Molte grazie. Ha funzionato. Non so perché non ha funzionato prima quando controllo.
Sukeshini,

8

Come ha sottolineato Petar, viene espanso, quindi se si tratta di un array o di un oggetto, non è necessario print_r. Ma se lo mescoli, come:

Mage::log('my string' . $array);

hai un problema, perché la conversione da array phps a stringa significa:

array(... whatever...) -> 'String'

E con un oggetto, php prova a chiamare il metodo __toString se questo non esiste, viene generato un errore (credo).

E per riferimento 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) {
    }
}

Niente di testato :-)


Hai ragione. Ho testato il codice. Se mettiamo come Mage :: log ('my string'. $ Array); questo stamperà "my stringArray"
Sukeshini,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.