Réponses:
Mage::log(print_r($arr, 1), null, 'logfile.log');
L'ajout d'un deuxième paramètre à print_r renvoie une chaîne avec une variable imprimée.
[EDIT]
sur la base des commentaires ci-dessous, je me sens obligé d'offrir d'autres options pour enregistrer un tableau.
Mage::log($arr, null, 'logfile.log');
ou si vous avez besoin d'un préfixe de chaîne pour le tableau
Mage::log('prefix'.Zend_Debug::dump($arr, null, false), null, 'logfile.log');
Le deuxième paramètre de Zend_Debug::dump()
est une étiquette. Si ce n'est pas le cas, null
il sera ajouté avant le vidage du tableau.
Le troisième paramètre des Zend_Debug::dump()
moyens echo
. Si c'est le cas, true
le résultat du vidage sera répercuté, s'il l'est, false
il sera renvoyé sous forme de chaîne. Dans votre cas, vous en avez besoin false
.
print_r
ici, l'enregistreur de Magento agrandira automatiquement les tableaux et les objets
print_r
, un meilleur choix pourrait être d'utiliser Zend_Debug::dump($var)
.
Avez-vous essayé de faire simplement:
Mage::log($array, null, 'logfile.log', true);
La méthode du journal de mage doit étendre le tableau lui-même.
Comme Petar l'a souligné, il est développé, donc s'il s'agit d'un tableau ou d'un objet, aucun print_r n'est nécessaire. Mais si vous le mélangez, comme:
Mage::log('my string' . $array);
vous rencontrez un problème, car la conversion du tableau phps en chaîne signifie:
array(... whatever...) -> 'String'
Et avec un objet, php essaie d'appeler la méthode __toString si cela n'existe pas, une erreur est levée (je pense).
Et pour référence 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) {
}
}
Rien de testé :-)