Risposte:
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, true
il risultato del dump verrà ripetuto, in caso false
contrario verrà restituito come stringa. Nel tuo caso ne hai bisogno false
.
print_r
qui, il logger di Magento espande automaticamente array e oggetti
print_r
, una scelta migliore potrebbe essere quella di usare Zend_Debug::dump($var)
.
Hai provato a fare solo:
Mage::log($array, null, 'logfile.log', true);
Il metodo di log del mago dovrebbe espandere l'array da solo.
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 :-)