Jawaban:
Mage::log(print_r($arr, 1), null, 'logfile.log');
Menambahkan parameter kedua ke print_r akan mengembalikan string dengan variabel yang dicetak.
[EDIT]
berdasarkan komentar di bawah ini saya merasa berkewajiban untuk menawarkan opsi lain untuk mencatat array.
Mage::log($arr, null, 'logfile.log');
atau jika Anda membutuhkan awalan string ke array
Mage::log('prefix'.Zend_Debug::dump($arr, null, false), null, 'logfile.log');
Parameter kedua Zend_Debug::dump()adalah label. Jika tidak, nullini akan ditambahkan sebelum array dump.
Parameter ketiga Zend_Debug::dump()berarti echo. Jika itu truemaka hasil dump akan digaungkan, jika falseitu akan dikembalikan sebagai string. Dalam kasus Anda, Anda membutuhkannya false.
print_rsini, Logger Magento akan mengekspansi array dan objek secara otomatis
print_r, pilihan yang lebih baik adalah menggunakan Zend_Debug::dump($var).
Sudahkah Anda mencoba melakukan hal yang sama:
Mage::log($array, null, 'logfile.log', true);
Metode Mage log harus memperluas array itu sendiri.
Seperti yang ditunjukkan Petar, itu diperluas, jadi jika itu adalah array atau objek, tidak perlu print_r. Tetapi jika Anda mencampurnya, seperti:
Mage::log('my string' . $array);
Anda mendapatkan masalah, karena konversi array ke string phps berarti:
array(... whatever...) -> 'String'
Dan dengan sebuah objek, php mencoba memanggil metode __toString jika ini tidak ada, kesalahan dilemparkan (saya pikir).
Dan untuk referensi, 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) {
}
}
Tidak ada yang diuji :-)