¿Cómo podemos imprimir la variable de matriz en el archivo de registro de Magento 2?

13

Estoy tratando de imprimir contenidos variables de matriz en un archivo de registro.

En Magento 1, era posible usar Mage::log(print_r($arr, 1), null, 'logfile.log');

Para Magento 2, en el archivo de clase he escrito el siguiente código:

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);
    }

Cuando ejecuto el código después de borrar la memoria caché, Debug.logy system.loglos archivos no están mostrando el contenido de la matriz.

Por favor, comparta si alguien tiene alguna idea al respecto.

Rajput orante
fuente

Respuestas:

16

Supongamos que su matriz es

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

entonces tiene que escribir el siguiente código para escribir el formato de matriz adecuado en su archivo de registro

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

Se imprimirá en su archivo de registro

[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
fuente
10

Ver declaración del método de registro

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

Entonces, necesitas un código como

$this->_logger->log(100, json_encode($options));
Kandy
fuente
Yo mismo imprimiría_r ($ opciones, verdadero) en lugar de la codificación json. Pero las preferencias \ o /
Barry Carlyon
44
mejor aún:$this->_logger->debug(json_encode($options));
nevvermind
2

Este método me funciona bien.

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

Luego revise su system.logarchivo.

MagentoMan
fuente
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') ));

}

Pruebe esto, imprimirá la matriz. Probado

HaFiz Umer
fuente
0

Para la matriz y también el objeto solo use

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

public function logs(){

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

y verifique la salida en el /var/log/debug.logarchivo

HaFiz Umer
fuente
0

Veo que el archivo principal usa 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
fuente