Comment imprimer une variable de tableau dans le fichier journal de Magento 2?

13

J'essaie d'imprimer le contenu des variables du tableau dans un fichier journal.

Dans Magento 1, il était possible d'utiliser Mage::log(print_r($arr, 1), null, 'logfile.log');

Pour Magento 2, dans le fichier de classe, j'ai écrit le code suivant:

protected $_logger;

    public function __construct(\Psr\Log\LoggerInterface $logger) {
        $this->_logger = $logger;
    }


private function getValuesAsHtmlList(\Magento\Framework\Object $object) {
        $options = $this->getOptions($object);
       //$this->_logger->addDebug($options );
        $this->_logger->log(100,null,$options);
    }

Lorsque j'exécute le code après avoir effacé le cache, les fichiers Debug.log& system.logn'affichent pas le contenu du tableau.

Veuillez partager si quelqu'un en a une idée.

Praful Rajput
la source

Réponses:

16

Supposons que votre tableau soit

$a = array ('a' => 'apple', 'b' => 'banana', 'c' => array ('x', 'y', 'z'));

alors vous devez écrire ci-dessous le code pour écrire le format de tableau approprié dans votre fichier journal

$this->_logger->log(100,print_r($a,true));

Il imprimera dans votre fichier journal

[2015-11-09 06:58:27] main.DEBUG: Array
(
    [a] => apple
    [b] => banana
    [c] => Array
        (
            [0] => x
            [1] => y
            [2] => z
        )

)
 {"is_exception":false} []
Keyur Shah
la source
10

Voir la méthode de déclaration du journal

public function  \Psr\Log\LoggerInterface::log($level, $message, array $context = array());

Donc, vous avez besoin d'un code comme

$this->_logger->log(100, json_encode($options));
KAndy
la source
J'imprimerais moi-même ($ options, true) au lieu du codage json. Mais les préférences \ o /
Barry Carlyon
4
mieux encore:$this->_logger->debug(json_encode($options));
nevvermind
2

Cette méthode fonctionne bien pour moi.

$this->logger->info(print_r($myArray, true));

Vérifiez ensuite votre system.logdossier.

MagentoMan
la source
0
protected $_logger;

    public function __construct(\Psr\Log\LoggerInterface $logger) {
        $this->_logger = $logger;
    }

public function logs(){
  $level='log';
$this->_logger->log($level,'errorlog1234', array( array('test1'=>'123', 'test2' => '456'), array('a'=>'b') ));

}

Essayez ceci, il imprimera le tableau. Testé!

HaFiz Umer
la source
0

Pour les tableaux et les objets, utilisez simplement

public function __construct(\Psr\Log\LoggerInterface $logger) {
        $this->_logger = $logger;
    }

public function logs(){

$this->logger->info(print_r($orderData, true));
}

et vérifier la sortie dans le /var/log/debug.logfichier

HaFiz Umer
la source
0

Je vois que le fichier principal utilise var_export:

//File: vendor/magento/module-paypal/Model/AbstractIpn.php
/**
 * Log debug data to file
 *
 * @return void
 */
protected function _debug()
{
    if ($this->_config && $this->_config->getValue('debug')) {
        $this->logger->debug(var_export($this->_debugData, true));
    }
}
De Nguyen
la source