Bagaimana cara mencetak konten array dalam file log?

18

Bagaimana cara mencetak konten array ke file log di magento CE 1.7 tanpa iterasi melalui loop?

Sukeshini
sumber

Jawaban:

26
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.

Marius
sumber
Terima kasih. Itu bekerja dengan sempurna. Saya pikir Anda telah melewatkan koma antara parameter fungsi print_r. Sebaliknya ada yang berhenti total.
Sukeshini
@ Su123 Ya ... Saya melihat itu. Sudah diperbaiki sekarang
Marius
6
Anda tidak perlu membutuhkannya di print_rsini, Logger Magento akan mengekspansi array dan objek secara otomatis
Alan Storm
Jika Anda bersikeras menggunakan print_r, pilihan yang lebih baik adalah menggunakan Zend_Debug::dump($var).
pspahn
@Lan Storm: Terima kasih. Saya menguji saran Anda. Ini bekerja dengan sempurna.
Sukeshini
11

Sudahkah Anda mencoba melakukan hal yang sama:

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

Metode Mage log harus memperluas array itu sendiri.

Petar Dzhambazov
sumber
Terima kasih banyak. Itu berhasil. Saya tidak tahu mengapa itu tidak berfungsi lebih awal ketika saya memeriksa.
Sukeshini
8

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 :-)

Fabian Blechschmidt
sumber
Anda benar. Saya menguji kodenya. Jika kita menaruh seperti Mage :: log ('my string'. $ Array); ini akan mencetak 'my stringArray'
Sukeshini