我们如何在Magento 2的日志文件中打印数组变量?


14

我正在尝试将数组变量内容打印到日志文件中。

在Magento 1中,可以使用 Mage::log(print_r($arr, 1), null, 'logfile.log');

对于Magento 2,在类文件中,我编写了以下代码:

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

当我在清除缓存后执行代码时,Debug.logsystem.log文件未显示数组内容。

如果有人对此有任何想法,请分享。

Answers:


17

假设你的数组是

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

那么您必须编写以下代码以在日志文件中写入正确的数组格式

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

它将打印在您的日志文件中

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

)
 {"is_exception":false} []

10

请参阅日志方法的声明

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

所以,你需要像

$this->_logger->log(100, json_encode($options));

我本人会使用print_r($ options,true)而不是json编码。但偏好\ o /
Barry Carlyon's 2015年

4
更好的是:$this->_logger->debug(json_encode($options));
nevvermind 2015年

2

这种方法对我来说很好。

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

然后检查您的system.log文件。


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

}

试试这将打印数组。 经过测试!


0

对于数组和对象,只需使用

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

public function logs(){

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

并检查/var/log/debug.log文件中的输出


0

我看到核心文件使用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));
    }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.