Come stampare i contenuti di matrice nel file di log?
-
16-10-2019 - |
Domanda
Come stampare il contenuto array in un file di log in Magento CE 1.7 senza l'iterazione attraverso un ciclo?
Soluzione
Mage::log(print_r($arr, 1), null, 'logfile.log');
L'aggiunta di un secondo parametro di print_r restituirà una stringa variabile stampata. < br>
[EDIT]
sulla base dei commenti qui sotto mi sento obbligato ad offrire altre opzioni per la registrazione di un array.
Mage::log($arr, null, 'logfile.log');
o se avete bisogno di un prefisso di stringa alla matrice
Mage::log('prefix'.Zend_Debug::dump($arr, null, false), null, 'logfile.log');
Il secondo parametro di Zend_Debug::dump()
è un'etichetta. Se questo non è null
verrà aggiunto a prima della discarica array.
Il terzo parametro di Zend_Debug::dump()
significa echo
. Se sarà eco di essa la true
allora il risultato discarica, se è false
verrà restituito sotto forma di stringa. Nel tuo caso è necessario che sia false
.
Altri suggerimenti
Hai provato a fare proprio:
Mage::log($array, null, 'logfile.log', true);
metodo log Mage dovrebbe espandere l'array è di per sé.
Come Petar sottolineato, è espanso, quindi se è un array o un oggetto, non c'è print_r necessario. Ma se lo si miscela, come:
Mage::log('my string' . $array);
si ottiene un problema, perché phps array per mezzo di conversione di stringhe:
array(... whatever...) -> 'String'
e con un oggetto, cerca php per 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 testato: -)