Câu trả lời:
Mage::log(print_r($arr, 1), null, 'logfile.log');
Thêm một tham số thứ hai vào print_r sẽ trả về một chuỗi có biến được in.
[EDIT]
dựa trên các nhận xét bên dưới, tôi cảm thấy bắt buộc phải cung cấp các tùy chọn khác để đăng nhập một mảng.
Mage::log($arr, null, 'logfile.log');
hoặc nếu bạn cần một tiền tố chuỗi cho mảng
Mage::log('prefix'.Zend_Debug::dump($arr, null, false), null, 'logfile.log');
Tham số thứ hai của Zend_Debug::dump()
là một nhãn. Nếu đây không phải là null
nó sẽ được thêm vào trước khi kết xuất mảng.
Tham số thứ ba của Zend_Debug::dump()
phương tiện echo
. Nếu true
đó là kết quả kết xuất sẽ được lặp lại, nếu false
nó sẽ được trả về dưới dạng một chuỗi. Trong trường hợp của bạn, bạn cần nó được false
.
print_r
ở đây, logger của Magento sẽ tự động mở rộng các mảng và đối tượng
print_r
, một sự lựa chọn tốt hơn có thể là sử dụng Zend_Debug::dump($var)
.
Bạn đã cố gắng chỉ làm:
Mage::log($array, null, 'logfile.log', true);
Phương pháp nhật ký mage nên mở rộng mảng nó tự.
Như Petar đã chỉ ra, nó được mở rộng, vì vậy nếu nó là một mảng hoặc một đối tượng, thì không cần print_r. Nhưng nếu bạn trộn nó, như:
Mage::log('my string' . $array);
bạn gặp sự cố, vì mảng phps chuyển đổi chuỗi có nghĩa là:
array(... whatever...) -> 'String'
Và với một đối tượng, php cố gắng gọi phương thức __toString nếu điều này không tồn tại, một lỗi được đưa ra (tôi nghĩ).
Và để tham khảo , 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) {
}
}
Không có gì được kiểm tra :-)