2010-02-08 8 views
9

में लॉग इन करना चाहिए, मैं एक नई परियोजना शुरू कर रहा हूं और सोच रहा हूं कि मुझे किस चीज को लॉगिंग करना चाहिए। लॉगफाइल केवल डेवलपर्स को बग खोजने में मदद करने के लिए है। उपयोग का मामला यह है कि जब एक अनचाहे अपवाद फेंक दिया जाता है तो एक अधिसूचना डेवलपर को भेजी जाती है, जिसके पास लॉगफाइल और स्टैकट्रैक तक पहुंच होती है।मुझे उत्पादन ऐप

लॉगफाइल में मुझे किन चीज़ों को शामिल करना चाहिए? लॉग इन सब कुछ काम नहीं करेगा। मुझे पता है कि यह कहना मुश्किल है, क्योंकि उत्तर को शायद सिस्टम के बारे में गहरी जानकारी की आवश्यकता है। तो मुझे लगता है कि मैं वास्तव में "सर्वोत्तम प्रथाओं" के लिए पूछ रहा हूं। कृपया विशिष्ट उदाहरण दें।

क्या यह डेस्कटॉप क्लाइंट एप्लिकेशन, डेस्कटॉप सर्वर या वेबसर्वर जैसे अनुप्रयोग प्रकार पर भी निर्भर करता है?

+0

यह भी देखें http://stackoverflow.com/questions/1902133/what-are-the-best-practices-for-including-logging-using-log4net –

उत्तर

2

सामान्य

  • में आप दिनांक समय मान (प्रवेश चौखटे के टाइमस्टैम्प हेडर फील्ड बारे में बात नहीं) सुनिश्चित करें कि आप एक सार्थक प्रारूप में उन्हें लॉग ऑन कर लॉग इन करते हैं। "ToString()" आमतौर पर पर्याप्त नहीं है यदि आपको स्थानीय बनाम यूटीसी या मिलीसेकंड के बारे में जानकारी चाहिए (मैं "yyyy-MM-dd hH: mm: ss.fff zzz", YMMV)
  • यदि आप अपवाद लॉग करते हैं, किसी और चीज के बजाय "ToString()" के लिए जाएं। विवादास्पद हो सकता है, लेकिन कारणों के लिए here देखें।

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

यह आपके पर्यावरण या ग्राहक पर निर्भर हो सकता है जो संवेदनशील माना जाता है, लेकिन उदाहरण हैं: - त्रुटि संदेशों में वास्तविक उपयोगकर्ता इनपुट। - उपयोगकर्ता अनुमति सेट, आदि - SQL कथन, विशेष रूप से वास्तविक मापदंडों साथ - एक्सएमएल अनुरोध/प्रतिक्रिया संरचनाओं

लॉग इन करने के बारे में जानकारी का सही विवरण के स्तर को ढूँढना हमेशा जानकारी की मात्रा लॉग इन बीच एक समंजन है, प्रदर्शन यह करने के लिए लागत केवल को लिखने, लेकिन यह भी नहीं इस जानकारी को कोड में और उस जानकारी की संवेदनशीलता का उत्पादन करें। और यही वजह है कि कोई भी गंभीर लॉगिंग सिस्टम "स्तर" या "श्रेणियां" खेलता है।

आप एक "स्तर" या "श्रेणी" है कि उत्पादन में विकास में लेकिन बंद पर स्विच किया जा सकता पर संभावित senstive लॉग जानकारी सकता है। यदि आप वास्तव में ओवरबोर्ड जाना चाहते हैं, तो आप एक EventLog प्रविष्टि लिख सकते हैं जब आपका एप्लिकेशन यह पता लगाता है कि इस तरह के लॉगिंग सक्षम है, इसलिए यह उत्पादन में "पर्ची" नहीं करता है।

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

6

पहला नियम "संवेदनशील जानकारी लॉग न करें!"। उदाहरण के लिए: सोशल सिक्योरिटी नंबर, क्रेडिट कार्ड नंबर, पासवर्ड इत्यादि ... आप नहीं जानते कि इसे देखने के लिए अनुमति कौन मिल सकती है और इससे आपको कुछ कानूनी समस्याएं मिल सकती हैं।

तीसरे पक्ष के घटकों के साथ संचार लॉग करना उपयोगी है (उदाहरण के लिए वेब सेवाएं या तो ..)। यदि कोई समस्या होती है तो आप तृतीय पक्ष विक्रेता को या आपके लिए उपयोगी जानकारी प्रदान करने में सक्षम होंगे।

उपयोगकर्ताओं द्वारा किए गए कार्यों को संक्षेप में ट्रैक करना उपयोगी है ... विशेष पृष्ठ पर जा रहा है ... कुछ कर रहा है। तो यदि कोई ग्राहक आपको फोन पर कॉल करता है और कहता है कि आपके उत्पाद में कुछ गड़बड़ है - तो आप जांच सकते हैं कि वह अब क्या कर रहा है।

हमारी कंपनी में यह पता लगाने के लिए एक सामान्य प्रथा है कि डेटाबेस क्वेरी कितनी पूर्ण हो जाती है। बोतल-गर्दन को कभी-कभी पहचानने या अपने सिस्टम (एप्लिकेशन सर्वर या डेटाबेस सर्वर) के साथ कुछ समस्याओं की पहचान करने का यह तरीका है।

आप अपने सिस्टम डॉस हमलों, ब्रूट फोर्स बॉट्स को तोड़ने के कुछ प्रयासों को भी ट्रैक कर सकते हैं ... और इसी तरह।

आशा है कि मदद करता है!

+1

+1 संवेदनशील जानकारी लॉगिंग न करने के लिए +1 – APC

1

एनएलओजी जैसे कुछ के लिए प्रलेखन पर नज़र डालें। यह आपको कुछ विचार देगा कि आपको लॉगिंग करना चाहिए और इसे कैसे नियंत्रित किया जा सकता है।

+0

क्या आप गहरी प्रदान कर सकते हैं संपर्क? मैंने अभी एनएलओजी दस्तावेज स्कैन किया है (http://nlog-project.org/documentation.html) और कोई दिशानिर्देश नहीं मिला। – Karsten

1

अपवाद फेंकने वाले विधि का नाम लॉग करें और इसका उपयोग करने वाले किसी भी पैरामीटर (यानी राज्य)। उपयोगकर्ता की आईडी और विशेषाधिकार लॉग करें। एक वेब परिदृश्य में, आईपी पता और शीर्षलेख लॉग करें।

1

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

डेवलपर्स को सीधे अनचाहे अपवादों के साथ ईमेल भेजने और कुछ भी लॉग इन करने का अच्छा विचार हो सकता है।

+0

वास्तव में यह लॉगिंग के बारे में सोचने का तरीका है, मुझे लॉगिंग में बड़ा मूल्य दिखाई नहीं देता है। लेकिन कई लोगों को वास्तव में प्रवेश की तरह लगता है, तो मुझे लगता है कि मैं इसे अभी तक न सिर्फ हो रही है ... – Karsten

+0

तो वहाँ हम दोनों है;) –

+0

तृतीय पक्षों के साथ बातचीत प्रवेश करें। – beluchin

0

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

  1. प्रत्येक अपवाद और त्रुटियों को लॉग करें। कुछ भी नहीं बचना चाहिए।
  2. उपयोगकर्ता लॉगिन और लॉगआउट कार्रवाई लॉगिंग पर विचार करें। दुर्भावनापूर्ण हमलों और सामानों के लिए आपके आवेदन की निगरानी करने के लिए यह एक अच्छी जानकारी है।
  3. आप हर विधि को लॉग इन नहीं कर सकते हैं, लेकिन यदि सिस्टम सही तरीके से डिज़ाइन किया गया है और यदि आपके पास एन परतों के बीच आपके संचार के लिए प्रविष्टि का एक बिंदु है तो आप उस विधि को लॉग कर सकते हैं। यानी सहेजें, हटाएं, अद्यतन विधियां इत्यादि।
  4. कुछ भी # डीबग कोड के अंदर लॉगिंग प्रदान करते हैं ताकि आप उत्पादन में डिबगिंग चालू कर सकें और आवश्यकता होने पर अधिक लॉगिंग का उत्पादन कर सकें। देव पर्यावरण और डीबगिंग उत्पादन डेटाबेस में काम करते समय यह बहुत उपयोगी है।
2

मेरे पास दो अलग-अलग वातावरण हैं जहां लॉगिंग आवश्यकताएं पूरी तरह अलग हैं।

  1. कार्यालय आवेदन

यहाँ हम अपवाद हैं, लॉगिन जैसी आम बातों लॉग इन करें, एप्लिकेशन आदि शुरू प्लस संपादन/हटाने/वस्तुओं की प्रविष्टि। चीजें बूम होने पर क्या हुआ यह जांचने के लिए पर्याप्त है। हम इस मामले को पुन: उत्पन्न करने में सक्षम होने के लिए पर्याप्त लॉग इन करते हैं। लॉग को हमारे मामले में असंबद्ध होने की इजाजत है ताकि हम समस्याओं की जांच कर सकें।

  1. औद्योगिक अनुप्रयोग।

यहां हम लगभग सबकुछ रसोईघर सिंक के साथ लॉग इन करते हैं। यह सोफटेयर है जिसे 24/7 चलाने की जरूरत है ताकि एक साधारण चेतावनी आने वाली आपदा का संकेत हो। एक उदाहरण यह है कि हमारे पास कुछ अजीब टाइमआउट थे और कुछ समय की कमी की आवश्यकता नहीं थी। अंत में लॉगफाइल ने हमें सूचना दी: कुछ 100 बाइट्स के टेक्स्टफाइल को सहेजने में कभी-कभी 5 सेकंड से अधिक समय लगा। आम तौर पर जो समस्याएं खुद को पेश करती हैं वे चीजें हैं जिन्हें आपने बिल्कुल नहीं सोचा था, इसलिए लॉगिंग, लॉगिंग, लॉगिंग करना आपको क्या करना चाहिए! कुछ दिनों के बाद लॉग स्वचालित रूप से साफ हो जाते हैं।

हमने जो भी किया वह एक loglevel को लागू करता है जो अंतिम उपयोगकर्ता सेट कर सकता है: यदि वर्बोज़ पर सेट किया गया है, तो हम सभी लॉगिंग को सहेजते हैं, अगर न्यूनतम न्यूनतम त्रुटियों को सेट किया जाता है। इसलिए स्थिर चलने के कुछ हफ्तों के बाद हम धीरे-धीरे लॉग स्तर को कम से कम कम कर देते हैं और वहां रोकें हम वहां के साथ सहभागिता कर रहे थे।

तो मैं कहूंगा: यह आपके आवेदन पर निर्भर करता है।

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