2008-08-30 17 views
12

तो हमने काम की जगह पर गुजरने में लॉग इन करने पर चर्चा की है और मैं सोच रहा था कि क्या आप में से कुछ लोग मुझे आपके दृष्टिकोण के कुछ विचार दे सकते हैं?आपके ऐप के लिए लॉगिंग अच्छा लॉगिंग है?

आम तौर पर हमारे परिदृश्य, वास्तव में कोई लॉगिंग नहीं है, और ज्यादातर .NET ऐप्स, Winforms/WPF क्लाइंट वेब सेवाओं के माध्यम से बात करते हैं या डीबी पर सीधे जाते हैं।

तो, असली सवाल यह है कि आप कहां लॉग करेंगे या कहां लॉग करेंगे? फिलहाल हमारे पास त्रुटि संदेशों की रिपोर्ट करने वाले उपयोगकर्ता हैं - इसलिए मैं लॉग स्टार्टअप/शट डाउन, अपवाद मानता हूं ...

क्या आप इसे वेब सेवाओं या डीबी पर कॉल करने के लिए लेते हैं? पेज लोड?

उस समय आप एक अच्छा विचार कैसे प्राप्त कर सकते हैं कि उपयोगकर्ता उस समय क्या करने का प्रयास कर रहा था?

क्या यह सभी तरीकों से जाना बेहतर है और कई प्रयासों/दिनों में सब कुछ लॉग इन करना बेहतर है, या केवल आपको लॉग इन करें (एचडीडी सस्ता है)।

मुझे लगता है कि यह कुछ प्रश्न हैं, लेकिन मैं अधिक जानकारी प्राप्त करना चाहता हूं कि बड़ी दुकानों में वास्तविक अभ्यास क्या है!

उत्तर

10

लॉगिंग के लिए महत्वपूर्ण बात अच्छी योजना है। मैं सुझाव दूंगा कि आप एंटरप्राइज़ लाइब्रेरी अपवाद और लॉग इन एप्लिकेशन ब्लॉक (http://msdn.microsoft.com/en-us/library/cc467894.aspx) देखेंगे। एक सीखने की अवस्था का एक बहुत छोटा सा हिस्सा है लेकिन यह काफी अच्छा काम करता है। इस समय मैं जिस दृष्टिकोण का पक्ष लेता हूं वह 4 प्राथमिकता स्तरों को परिभाषित करना है। 4 = अनचाहे अपवाद (इवेंट लॉग में त्रुटि), 3 = हैंडल अपवाद (इवेंट लॉग में चेतावनी), 2 = एक बाहरी संसाधन जैसे कि webservice, डीबी या मेनफ्रेम सिस्टम (इवेंट लॉग में जानकारी) तक पहुंचें, 1 = वर्बोज/कुछ और ब्याज (घटना लॉग में जानकारी)।

एप्लिकेशन ब्लॉक का उपयोग करना यह उस स्तर की प्राथमिकता को ट्विक करना आसान है जिसे आप लॉग करना चाहते हैं। तो विकास में आप सबकुछ लॉग करेंगे लेकिन जब आप उत्पादन में एक स्थिर प्रणाली प्राप्त करेंगे, तो आप शायद केवल अनचाहे अपवादों और संभावित रूप से अपवादों को संभालने में रुचि रखते हैं।

अद्यतन: स्पष्टता के लिए, मैं सुझाव दूंगा कि आप अपने Winform/wpf ऐप और अपने वेबसाइसेस दोनों में लॉग इन कर रहे हैं। एक वेब परिदृश्य में, मुझे अतीत में समस्याएं थीं जहां क्लाइंट पर ऐप सर्वर के माध्यम से एक त्रुटि को जोड़ना मुश्किल हो सकता है। मुख्य रूप से क्योंकि webservices के माध्यम से किसी भी त्रुटि को SOAP अपवाद के रूप में लपेटा जाता है। मुझे अपने सिर के ऊपर से याद नहीं है, लेकिन मुझे लगता है कि यदि आप एक कस्टम अपवाद हैंडलर (जो एंटरप्राइज़ लाइब्रेरी का हिस्सा है) का उपयोग करते हैं तो आप ऐप सर्वर से अपवाद की हैंडलिंग इंस्टेंस आईडी जैसे अपवादों पर डेटा जोड़ सकते हैं। यह LogParser (http://www.microsoft.com/downloads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07&displaylang=en) का उपयोग करके किसी क्लाइंट पर अपने ऐप बॉक्स पर अपवादों को जोड़ना आसान बनाता है।

दूसरा अपडेट: मैं प्रत्येक अलग-अलग ईवेंट को एक अलग ईवेंट आईडी देना चाहता हूं और उसे टेक्स्ट फ़ाइल या स्प्रेडशीट में स्रोत नियंत्रण के अंतर्गत ट्रैक करना चाहता हूं। हां, यह दर्द है, लेकिन यदि आप उत्पादन में अपने सिस्टम की देखभाल करने वाली आईटी टीम के लिए भाग्यशाली हैं, तो मुझे लगता है कि वे अलग-अलग आयोजनों की अलग-अलग घटनाओं की अपेक्षा करते हैं।

1

एक त्वरित उत्तर के रूप में मैं श्रेणियों की एक श्रृंखला के साथ आना और स्विच करने योग्य लॉगिंग स्तर, उदाहरण के लिए कहूंगा जानकारी, चेतावनी, त्रुटि, महत्वपूर्ण, आदि

फिर लॉगिंग स्तर को आपके इच्छित स्तर के स्तर को ट्यून करने के लिए सेट करना आसान बनाएं। आमतौर पर, लॉगिंग स्तर को कॉन्फ़िगरेशन फ़ाइल में सेट करें और ऐप को रोकें और पुनरारंभ करें।

मैं डेवलपर्स को भी प्रचारित करता हूं कि प्रत्येक स्तर के लिए क्या अर्थ है।

संपादित करें: मैं नियमित रूप से लॉग फ़ाइलों को घुमाने, संपीड़ित करने और संग्रहित करने के लिए एक प्रणाली भी स्थापित करता हूं, शायद रात में।

1

एक विशिष्ट डेस्कटॉप ऐप के लिए, मैं वर्तमान सत्र पर सबकुछ स्टोर करता हूं, और शायद पिछले एन सत्रों या आकार में x तक जानकारी संदेश संग्रहीत कर सकता हूं।

मुझे लगता है कि आपके संदेश व्यवस्थित हैं। हम 4 श्रेणियों का उपयोग करते हैं; त्रुटियां, चेतावनियां, जानकारी, और ट्रेस। हम अभी भी पता लगा रहे हैं कि किस स्तर पर क्या चल रहा है। चूंकि मैं लॉग फ़ाइलों को पार्स करने के लिए उपयोग कर रहा हूं, मैं आमतौर पर "अधिक लॉग इन" कहता हूं। पठनीयता को पसीना न पड़े, आपको शायद इसका उपयोग करने से पहले लॉग फ़ाइल को थोड़ा सा संसाधित करना होगा।

अंत में, एक अच्छा लॉगिंग फ्रेमवर्क ढूंढें जो आपको जीवनकाल और भंडारण स्थान पर अपने स्पूल उपयोग को नियंत्रित करने की अनुमति देता है, और एक उचित एपीआई जो आपके कोड पर प्रभाव को कम करता है। आदर्श रूप में आप बस info("waaah") या warning("waah") टाइप करें और API आपके लिए सभी फैंसी टैगिंग करता है।

2

क्या यह सभी तरीकों से जाना बेहतर है और कई प्रयासों/दिनों में सब कुछ लॉग इन करना बेहतर है, या केवल आपको लॉग इन करें (एचडीडी सस्ता है)।

तथ्य हार्डड्राइव सस्ते हैं वास्तव में कुछ कारणों से संभवतः सबकुछ लॉग इन करने का एक अच्छा कारण नहीं है .. एक के लिए, बहुत व्यस्त एप्लिकेशन के साथ, आप वास्तव में इसे धीमा नहीं करना चाहते हैं और डिस्क लिखना लिखना लिखना लिखता है (हार्डड्रिव बहुत धीमी हैं)। दूसरा बिंदु, और अधिक महत्वपूर्ण - टेराबाइट्स के लॉग से बहुत कम लाभ प्राप्त होता है .. विकास के लिए, वे उपयोगी हो सकते हैं, लेकिन आपको उनमें से कुछ मिनटों से अधिक रखने की आवश्यकता नहीं है ..

कुछ लॉगिंग निश्चित रूप से उपयोगी है, अलग-अलग स्तर इसके बारे में जाने का एकमात्र तरीका है - उदाहरण के लिए डीबग() जानकारी() अनुरोध किए जाने पर ही लॉग हो जाता है (कॉन्फ़िगरेशन या कमांड लाइन ध्वज में), तो हो सकता है कि चेतावनी () और त्रुटि() लॉग फ़ाइल

अधिकांश चीजों के लिए मैंने लिखा है (छोटी स्क्रिप्ट्स) के लिए आमतौर पर केवल एक डीबग() फ़ंक्शन होता है, जो जांचता है कि --verbose सेट है, और प्रिंट करता है संदेश .. इस तरह से जब मैं आवश्यकता हो तो डीबग ("कुछ मूल्य:% s"% (avar)) को दबा सकता हूं, और वापस जाने और डिबगिंग प्रिंट() राज्य को हटाने के बारे में चिंता करने की ज़रूरत नहीं है कहीं भी।

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

मुझे लगता है कि यह एप्लिकेशन पर निर्भर करता है, लेकिन आम तौर पर, बड़े पैमाने पर अनुप्रयोग लॉग के कई स्तरों का उपयोग करते हैं जिन्हें आवश्यक होने पर सक्रिय किया जा सकता है। वेब अनुप्रयोगों के लिए छोटी चीजों के लिए, एक -verbose ध्वज या समकक्ष, लॉग त्रुटियों और (एक बिंदु पर) लॉग हिट के लिए।

असल में, "उत्पादन" लॉग में केवल उस जानकारी को लॉग करें जो आप उपयोग कर सकते हैं, विकास लॉग में जो कुछ भी संभव हो सके समस्याओं को ठीक करने की आवश्यकता हो सकती है।

4

This post on highscalability.com बड़े पैमाने पर वितरित सिस्टम में लॉगिंग पर एक अच्छा परिप्रेक्ष्य प्रदान करता है। (और संयोग से यह JoelOnSoftware पर एक पोस्ट का उल्लेख करके शुरू होता है)।

8

एक व्यवस्थापक होने के नाते, मैं वास्तव में उन सभी ऐप्स की सराहना करता हूं जो सभी लॉगिंग के लिए इवेंट लॉग (अधिमानतः स्वयं, अन्यथा एप्लिकेशन लॉग) पर लॉग ऑन करते हैं लेकिन लॉग का पता लगाते हैं।इवेंट लॉग पर लॉग इन करके, आप इसे अधिक संभावना बनाते हैं कि व्यवस्थापक कर्मचारियों द्वारा चेतावनी या त्रुटियों को एक बड़ी समस्या बनने से पहले पाया जा सकता है (यदि यह कोई समस्या है जिसे वे संबोधित कर सकते हैं), या उन्हें संपर्क में आने की अनुमति देता है देवताओं के साथ, जो समस्या का निवारण करने के लिए ट्रेस लॉग का उपयोग कर सकते हैं।

एक कस्टम .NET ऐप का समर्थन करने में मेरा सबसे बड़ा दर्द बिंदु अभी यह है कि एक ही विक्रेता से 8 अलग-अलग एप्लिकेशन (कुछ कंसोल ऐप्स, कुछ Winforms, और कुछ वेब) हैं। उनमें से कोई भी ईवेंट लॉग पर लॉग इन नहीं करता है, उनके सभी की अपनी कस्टम लॉग फाइलें होती हैं। लेकिन सभी Winforms और कंसोल ऐप्स के लिए, वे फ़ाइल चलाते समय फ़ाइल को खोलते रहते हैं, इसलिए मैं मुद्दों के लिए इसकी निगरानी नहीं कर सकता। साथ ही, लॉग सभी अलग-अलग लिखे गए हैं, इसलिए उपयोगी जानकारी प्राप्त करने के लिए मुझे उन्हें थोड़ा अलग करना होगा।

यह मुझे किसी एप्लिकेशन की उपस्थिति की निगरानी करने के लिए मजबूर करता है (क्या यह बंदरगाहों पर प्रतिक्रिया दे रहा है, यह प्रक्रिया बहुत अधिक हो रही है, आदि ..) वास्तव में आवेदन की स्थिति क्या है ।

कृपया, कृपया उन लोगों पर विचार करें जो आपके आवेदन को तैनात किए जाने के बाद बनाए रखते हैं और वे लॉगिंग प्रदान कर सकते हैं। धन्यवाद!

+0

एक देव के रूप में मैं घटना लॉग पूर्ण होने के बारे में चिंता करता हूं और फिर त्रुटि दर्ज करते समय त्रुटि को मारता हूं। लेकिन मुझे लगता है कि आप जो भी लॉगिंग कर रहे हैं (फ़ाइल/डीबी) के साथ 'लॉगिंग' असफलताओं से निपटना होगा। – AndyM

+0

@AndyM इवेंट लॉग भरना एक चिंता हो सकती है और आप बिल्कुल सही हैं कि किसी भी प्रकार की लॉगिंग विफल हो सकती है। जिस बिंदु को मैं बनाने की कोशिश कर रहा हूं वह यह है कि जब एक लॉगिंग रणनीति को एक साथ रखा जाता है, तो उस गरीब व्यक्ति/लड़की पर विचार करें जिसे आवेदन का समर्थन करना होगा और चाहे आप उन्हें हर छोटी त्रुटि पर कॉल करना चाहते हैं या चाहते हैं कि वे एक आवेदन की स्थिति के बारे में एक सूचित निर्णय लेने में सक्षम। –

0

धन्यवाद दोस्तों, बहुत अच्छी जानकारी है, लेकिन मार्टिन ने मुझे आगे बढ़ने के तरीके पर थोड़ा और विस्तार दिया है। मैं उसे जवाब दूंगा, जैसा कि ऐसा लगता है कि हम सामने वाले कुछ पेजों के जवाब बंद हो जाएंगे।

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