2010-05-26 17 views
5

क्या एमवीसी अनुप्रयोग में लॉगिंग कार्यक्षमता कहां डाली जाए, उदाहरण के लिए एक ज़ेंड फ्रेमवर्क एप्लिकेशन (Zend_Log) कहां से सबसे अच्छा अभ्यास है? क्या मुझे लॉगिंग को नियंत्रक या मॉडल में रखना चाहिए? या दोनों में?एमवीसी (ज़ेंड फ्रेमवर्क) में लॉगिंग

यदि दोनों में, क्या उनके पास एक ही लॉगर या अलग होना चाहिए?

उत्तर

8

वस्तु उन्मुख डिजाइन के लिए GRASP दिशा-निर्देशों में Information Expert सिद्धांत का पालन करें:

... इसे पूरा करने के लिए आवश्यक जानकारी के साथ सबसे कक्षाओं में एक जिम्मेदारी जगह।

तो आप उस कक्षा से लॉग पर लिखेंगे जिसमें आपको लॉग इन करने के लिए आवश्यक डेटा शामिल है। यदि आप जिस ईवेंट को लॉग करना चाहते हैं, वह मॉडल के काम से संबंधित है, तो मॉडल में लॉग को लिखें। यदि ईवेंट नियंत्रक के काम से संबंधित लॉग इन करना चाहता है, तो नियंत्रक में लॉग को लिखें।

ऐप के लिए एक लॉग आउटपुट बनाएं। अन्यथा आपको किसी भी नैदानिक ​​जानकारी को खोजने के लिए कई लॉग फ़ाइलों के माध्यम से शिकार करना होगा! आप Zend_Registry में एक लॉग ऑब्जेक्ट स्टोर कर सकते हैं ताकि आप अपने ऐप में किसी भी कक्षा से लॉग को कॉल कर सकें।


अपनी टिप्पणी पुन:

बेहतर बस नाकाम शान से अगर लकड़हारा नहीं की उम्मीद रजिस्ट्री कुंजी के अंतर्गत पाया जाता है। ग़लत ढंग से असफल होने का मतलब है कि या तो stdout (वेब ​​पेज पर) या stderr (httpd सर्वर लॉग में) के लिए त्रुटि उत्पन्न करें, या अपवाद फेंक दें और ऐप को इसे संभालने दें।

निर्भरताओं के लिए, यह कोई समस्या नहीं है। जब भी कोई वर्ग किसी अन्य वर्ग का उपयोग करता है तो आपके पास समान निर्भरता होती है। Registry डिज़ाइन पैटर्न देखें।

+0

लेकिन रजिस्ट्री से खींचने वाले लॉगर के साथ, मॉडल की एक नई "छिपी हुई" निर्भरता है। यदि मैं किसी अन्य ऐप में मॉडल का उपयोग करता हूं - शायद लॉगिंग या किसी भिन्न कुंजी के नीचे संग्रहीत किए बिना - तो लॉगर प्राप्त करने का प्रयास विफल हो जाएगा। तो, क्या मेरे सभी मॉडल एक बेस मॉडल को उप-वर्ग करना चाहिए जिसमें लॉग(), setLogger(), getLogger() जैसी विधियां हों? या वह सिर्फ overkill है? –

+0

बहुत उपयोगी, बहुत धन्यवाद। ;-) –

6

Bill Karwin's comment के साथ सहमत होने पर, मैं एक एकल लॉग आउटपुट का भी उपयोग करता हूं लेकिन filter errors based on priority की क्षमता का लाभ भी लेता हूं (उदाहरण के लिए, एक फायरबग लॉगर भी है जो आसानी से सेटअप किया जा सकता है)।

हमारे मुख्य ऐप में, हमें एक डीबी-लेखक मिला (जिसे एक साधारण पृष्ठ बैकएंड पर आरएसएस-फीड में बदल दिया गया है) जिसे मुख्य लॉग के रूप में भी उपयोग किया जाता है, और गंभीर त्रुटियों के लिए ईमेल भी उपयोग किया जाता है। क्रमबद्ध डेटा के लिए बहुत आसान और इसके आंकड़े प्राप्त करना।

संबंधित मुद्दे