如何在日志文件中打印数组内容?


18

如何在不进行循环的情况下将数组内容打印到magento CE 1.7中的日志文件中?

Answers:


26
Mage::log(print_r($arr, 1), null, 'logfile.log');

print_r添加第二个参数将返回带有打印变量的字符串。 基于下面的评论,我
[EDIT]
有义务提供其他选项来记录数组。

Mage::log($arr, null, 'logfile.log');

或者如果您需要数组的字符串前缀

Mage::log('prefix'.Zend_Debug::dump($arr, null, false), null, 'logfile.log');

的第二个参数Zend_Debug::dump()是标签。如果不是null,它将添加到阵列转储之前。
的第三个参数Zend_Debug::dump()的装置echo。如果true是,则将回显转储结果,如果是,则将其false作为字符串返回。在您的情况下,您需要做到这一点false


谢谢。效果很好。我认为您已经错过了print_r函数的参数之间的逗号。相反,有一个句号。
Sukeshini

@ Su123是的...我看到了。它现在是固定的
马吕斯

6
您不需要print_r这里,Magento的记录器将自动扩展数组和对象
Alan Storm

如果您坚持使用print_r,一个更好的选择可能是使用Zend_Debug::dump($var)
pspahn

@Alan Storm:谢谢。我测试了你的建议。它运作完美。
Sukeshini


8

正如Petar指出的那样,它是可扩展的,因此,如果它是数组或对象,则不需要print_r。但是,如果将其混合,例如:

Mage::log('my string' . $array);

您遇到问题,因为phps数组到字符串的转换意味着:

array(... whatever...) -> 'String'

有了对象,php会尝试调用__toString方法(如果该方法不存在),则会引发错误(我认为)。

供参考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) {
    }
}

没有测试:-)


你是对的。我测试了代码。如果我们像Mage :: log('my string'。$ array);这样放置 这将打印“我的stringArray”
Sukeshini 2013年
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.