लॉग फ़ाइल में सरणी सामग्री कैसे प्रिंट करें?


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()echotruefalsefalse


धन्यवाद। इसने पूरी तरह से काम किया। मुझे लगता है कि आपने print_r फ़ंक्शन के मापदंडों के बीच अल्पविराम को याद किया है। इसके बजाय एक पूर्ण विराम था।
सुकेशिनी

@ Su123 हाँ ... मैंने देखा है। अब यह भी निश्चित होती है
मेरियस

6
आपको print_rयहाँ की आवश्यकता नहीं होनी चाहिए , Magento के लकड़हारे को ऑटोएक्स्पैंड एरेज़ और ऑब्जेक्ट्स
एलन स्टॉर्म

यदि आप उपयोग करने के लिए जोर देते हैं print_r, तो एक बेहतर विकल्प उपयोग करने के लिए हो सकता है Zend_Debug::dump($var)
pspahn

@ एलन स्टॉर्म: धन्यवाद। मैंने आपके सुझाव का परीक्षण किया। यह पूरी तरह से काम करता है।
सुकेशिनी

11

क्या आपने सिर्फ करने की कोशिश की है:

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

Mage लॉग विधि को स्वयं उस सरणी का विस्तार करना चाहिए।


बहुत बहुत धन्यवाद। इसने काम कर दिया। मैं नहीं जानता कि जब मैं जाँच करता था तो यह पहले क्यों काम नहीं करता था।
सुकेशिनी

8

जैसा कि पेटार ने कहा है, इसका विस्तार किया गया है, इसलिए यदि यह एक सरणी या एक वस्तु है, तो प्रिंट_र की आवश्यकता नहीं है। लेकिन अगर आप इसे मिलाते हैं, जैसे:

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 ('my string'। $ Array) की तरह लगाते हैं; यह 'माई स्ट्रैस ऐरे'
छापेगा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.