जवाबों:
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यहाँ की आवश्यकता नहीं होनी चाहिए , Magento के लकड़हारे को ऑटोएक्स्पैंड एरेज़ और ऑब्जेक्ट्स
print_r, तो एक बेहतर विकल्प उपयोग करने के लिए हो सकता है Zend_Debug::dump($var)।
क्या आपने सिर्फ करने की कोशिश की है:
Mage::log($array, null, 'logfile.log', true);
Mage लॉग विधि को स्वयं उस सरणी का विस्तार करना चाहिए।
जैसा कि पेटार ने कहा है, इसका विस्तार किया गया है, इसलिए यदि यह एक सरणी या एक वस्तु है, तो प्रिंट_र की आवश्यकता नहीं है। लेकिन अगर आप इसे मिलाते हैं, जैसे:
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) {
}
}
कुछ भी परीक्षण नहीं :-)