Answers:
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
这里,Magento的记录器将自动扩展数组和对象
print_r
,一个更好的选择可能是使用Zend_Debug::dump($var)
。
您是否尝试过:
Mage::log($array, null, 'logfile.log', true);
法师日志方法应自行扩展数组。
正如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) {
}
}
没有测试:-)