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, null
ini akan ditambahkan sebelum array dump.
Parameter ketiga Zend_Debug::dump()
berarti echo
. Jika itu true
maka hasil dump akan digaungkan, jika false
itu akan dikembalikan sebagai string. Dalam kasus Anda, Anda membutuhkannya false
.
print_r
sini, 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 :-)