วิธีการพิมพ์เนื้อหาของอาเรย์ในล็อกไฟล์?


18

วิธีการพิมพ์เนื้อหาของอาเรย์เป็นไฟล์บันทึกใน magento CE 1.7 โดยไม่ต้องวนซ้ำผ่านลูป?

คำตอบ:


26
Mage::log(print_r($arr, 1), null, 'logfile.log');

การเพิ่มพารามิเตอร์ตัวที่สองในprint_rจะส่งคืนสตริงที่มีตัวแปรที่พิมพ์
[แก้ไข]
ตามความคิดเห็นด้านล่างฉันรู้สึกว่าจำเป็นต้องเสนอตัวเลือกอื่นสำหรับการบันทึกอาร์เรย์

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

หรือถ้าคุณต้องการคำนำหน้าสตริงเพื่ออาร์เรย์

Mage::log('prefix'.Zend_Debug::dump($arr, null, false), null, 'logfile.log');

พารามิเตอร์ที่สองของZend_Debug::dump()คือฉลาก หากนี่ไม่ใช่nullมันจะถูกเพิ่มเข้าไปก่อนการถ่ายโอนข้อมูลอาร์เรย์
พารามิเตอร์ที่สามของวิธีการZend_Debug::dump() echoหากเป็นtrueผลลัพธ์การถ่ายโอนข้อมูลจะถูกสะท้อนถ้าfalseมันจะถูกส่งกลับเป็นสตริง falseในกรณีของคุณที่คุณต้องการให้เป็น


ขอบคุณ มันทำงานได้อย่างสมบูรณ์ ฉันคิดว่าคุณพลาดเครื่องหมายจุลภาคระหว่างพารามิเตอร์ของฟังก์ชัน print_r แทนที่จะมีการหยุดเต็ม
Sukeshini

@ Su123 ใช่ ... ฉันเห็นแล้ว ได้รับการแก้ไขแล้ว
Marius

6
คุณไม่จำเป็นต้องใช้print_rที่นี่นักตัดไม้ของวีโอไอพีจะทำการขยายอาร์เรย์และวัตถุโดยอัตโนมัติ
Alan Storm

หากคุณยืนยันในการใช้เป็นทางเลือกที่ดีกว่าอาจจะมีการใช้งานprint_r Zend_Debug::dump($var)
pspahn

@Alan Storm: ขอบคุณ ฉันทดสอบข้อเสนอแนะของคุณ มันทำงานได้อย่างสมบูรณ์
Sukeshini

11

คุณเคยลองทำไหม:

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

วิธีการบันทึก Mage ควรขยายอาเรย์ด้วยตนเอง


ขอบคุณมาก. มันได้ผล ฉันไม่รู้ว่าทำไมมันไม่ทำงานก่อนหน้านี้เมื่อฉันตรวจสอบ
Sukeshini

8

ดังที่ Petar ชี้ให้เห็นมันจะถูกขยายดังนั้นถ้ามันเป็นอาร์เรย์หรือวัตถุก็ไม่จำเป็นต้องมี print_r แต่ถ้าคุณผสมมันเช่น:

Mage::log('my string' . $array);

คุณได้รับปัญหาเนื่องจากอาร์เรย์ phps เป็นการแปลงสตริงหมายความว่า:

array(... whatever...) -> 'String'

และด้วยวัตถุ, php พยายามเรียกใช้เมธอด __toString หากไม่มีอยู่, มีข้อผิดพลาดเกิดขึ้น (ฉันคิดว่า)

และสำหรับการอ้างอิง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) {
    }
}

ไม่มีการทดสอบ :-)


คุณถูก. ฉันทดสอบรหัสแล้ว ถ้าเราใส่ Mage :: log ('string ของฉัน'. $ array); สิ่งนี้จะพิมพ์ 'stringArray ของฉัน'
Sukeshini
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.