Comment imprimer le contenu du tableau dans le fichier journal?

18

Comment imprimer le contenu d'un tableau dans un fichier journal dans magento CE 1.7 sans itérer dans une boucle?

Sukeshini
la source

Réponses:

26
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, nullil sera ajouté avant le vidage du tableau.
Le troisième paramètre des Zend_Debug::dump()moyens echo. Si c'est le cas, truele résultat du vidage sera répercuté, s'il l'est, falseil sera renvoyé sous forme de chaîne. Dans votre cas, vous en avez besoin false.

Marius
la source
Merci. Cela a parfaitement fonctionné. Je pense que vous avez manqué la virgule entre les paramètres de la fonction print_r. Au lieu de cela, il y a eu un arrêt complet.
Sukeshini
@ Su123 Ouais ... J'ai vu ça. C'est corrigé maintenant
Marius
6
Vous ne devriez pas avoir besoin print_rici, l'enregistreur de Magento agrandira automatiquement les tableaux et les objets
Alan Storm
Si vous insistez pour utiliser print_r, un meilleur choix pourrait être d'utiliser Zend_Debug::dump($var).
pspahn
@Alan Storm: Merci. J'ai testé votre suggestion. Cela fonctionne parfaitement.
Sukeshini
11

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.

Petar Dzhambazov
la source
Merci beaucoup. Ça a marché. Je ne sais pas pourquoi cela n'a pas fonctionné plus tôt lorsque je vérifie.
Sukeshini
8

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

Fabian Blechschmidt
la source
Vous avez raison. J'ai testé le code. Si nous mettons comme Mage :: log ('ma chaîne'. $ Array); cela affichera 'my stringArray'
Sukeshini