Làm thế nào để in nội dung mảng trong tệp nhật ký?


18

Làm cách nào để in nội dung mảng vào tệp nhật ký trong magento CE 1.7 mà không lặp qua vòng lặp?

Câu trả lời:


26
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à nullnó 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 falsenó 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.


Cảm ơn. Nó hoạt động hoàn hảo. Tôi nghĩ rằng bạn đã bỏ lỡ dấu phẩy giữa các tham số của hàm print_r. Thay vào đó là một điểm dừng hoàn toàn.
Sukeshini

@ Su123 Vâng ... Tôi đã thấy điều đó. Nó đã được sửa bây giờ
Marius

6
Bạn không cần print_rở đây, logger của Magento sẽ tự động mở rộng các mảng và đối tượng
Alan Storm

Nếu bạn khăng khăng sử dụng print_r, một sự lựa chọn tốt hơn có thể là sử dụng Zend_Debug::dump($var).
pspahn

@Alan Storm: Cảm ơn. Tôi đã thử đề nghị của bạn. Nó hoạt động hoàn hảo.
Sukeshini

11

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


Cảm ơn rất nhiều. Nó đã làm việc. Tôi không biết tại sao nó không hoạt động sớm hơn khi tôi kiểm tra.
Sukeshini

8

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


Bạn nói đúng. Tôi đã kiểm tra mã. Nếu chúng ta đặt như Mage :: log ('chuỗi của tôi'. $ Mảng); cái này sẽ in 'my stringArray'
Sukeshini
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.