मैं सुरक्षा महत्वपूर्ण वास्तविक समय प्रणालियों के साथ काम करता हूं और लॉगिंग अक्सर दुर्लभ कीड़े को पकड़ने का एकमात्र तरीका है जो कि एक पूर्णिमा पर एक नीले चंद्रमा को एक बार बदल देता है जब यह पूर्ण चंद्रमा होता है, अगर आप मेरा बहाव पकड़ते हैं। इस तरह के विषय के बारे में आपको जुनूनी बनाता है, इसलिए अगर मैं मुंह से झाग निकालना शुरू करता हूं तो मैं माफी मांग लूंगा। निम्नलिखित देशी कोड डीबग लॉग के लिए लिखा गया था, लेकिन इसमें से अधिकांश प्रबंधित दुनिया पर भी लागू होता है ...
पाठ लॉग फ़ाइलों का उपयोग करें। स्पष्ट लगता है, लेकिन कुछ लोग द्विआधारी लॉग फ़ाइलों को उत्पन्न करने की कोशिश करते हैं: यह सिर्फ गूंगा है क्योंकि मुझे फ़ील्ड में बाहर होने पर रीडर टूल की तलाश करने की आवश्यकता नहीं है। इसके अलावा अगर यह पाठ है और डिबग क्रिया है, तो एक अच्छा मौका है जब क्षेत्र इंजीनियर फ़ाइल को पढ़ सकता है और समस्या का निदान कर सकता है बिना मेरे पास वापस आए। हर कोई जीतता है।
मैं उन प्रणालियों को डिजाइन करता हूं जो हर चीज को लॉग करने में सक्षम हैं, लेकिन मैं डिफ़ॉल्ट रूप से सब कुछ चालू नहीं करता हूं। डिबग जानकारी को एक छिपे हुए डीबग संवाद को भेज दिया जाता है जो इसे टाइमस्टैम्प करता है और इसे एक लिस्टबॉक्स में आउटपुट करता है (डिलीट होने से पहले लगभग 500 लाइनों तक सीमित), और डायलॉग मुझे इसे रोकने की अनुमति देता है, इसे एक लॉग फ़ाइल में स्वचालित रूप से सहेजें, या इसे डायवर्ट करें एक संलग्न डिबगर। यह डायवर्जन मुझे कई अनुप्रयोगों से डीबग आउटपुट को बड़े करीने से देखने की अनुमति देता है, जो कभी-कभी एक जीवन रक्षक हो सकता है। मैं प्रयोग किया जाता सांख्यिक प्रवेश स्तर (उच्च आप स्तर निर्धारित करते हैं, उतना ही अधिक आप पर कब्जा) का उपयोग करें:
off
errors only
basic
detailed
everything
लेकिन यह बहुत ही अनम्य है - जैसा कि आप बग के प्रति अपना काम करते हैं, यह बहुत अधिक कुशल है कि आप लॉग इन पर ध्यान केंद्रित करने में सक्षम हो सकते हैं, जो आपको ट्रेसिटस के माध्यम से वेड के बिना होने की आवश्यकता है, और यह एक विशेष प्रकार का लेनदेन या ऑपरेशन हो सकता है। जो त्रुटि का कारण बनता है। यदि आपको सब कुछ चालू करने की आवश्यकता होती है, तो आप बस अपना काम कठिन बना रहे हैं। आपको बारीक-बारीक कुछ चाहिए।
इसलिए अब मैं एक फ्लैग सिस्टम के आधार पर लॉगिंग पर स्विच करने की प्रक्रिया में हूं। सब कुछ जो लॉग हो जाता है उसमें एक ध्वज होता है जो यह बताता है कि यह किस प्रकार का ऑपरेशन है, और इसमें चेकबॉक्स का एक सेट है जो मुझे यह परिभाषित करने की अनुमति देता है कि लॉग क्या हो जाता है। आमतौर पर यह सूची इस तरह दिखती है:
#define DEBUG_ERROR 1
#define DEBUG_BASIC 2
#define DEBUG_DETAIL 4
#define DEBUG_MSG_BASIC 8
#define DEBUG_MSG_POLL 16
#define DEBUG_MSG_STATUS 32
#define DEBUG_METRICS 64
#define DEBUG_EXCEPTION 128
#define DEBUG_STATE_CHANGE 256
#define DEBUG_DB_READ 512
#define DEBUG_DB_WRITE 1024
#define DEBUG_SQL_TEXT 2048
#define DEBUG_MSG_CONTENTS 4096
यह लॉगिंग सिस्टम जहाजों को रिलीज़ बिल्ड के साथ चालू करता है, और डिफ़ॉल्ट रूप से फाइल करने के लिए सहेजता है। यह पता लगाने के लिए बहुत देर हो चुकी है कि आपको बग के बारे में लॉग इन करना चाहिए था, अगर वह बग औसतन हर छह महीने में एक बार होता है और आपके पास इसे पुन: पेश करने का कोई तरीका नहीं है। लॉगिंग जो केवल डिबग बिल्ड के साथ काम करता है वह है। सादा। गूंगा।
सॉफ्टवेयर आम तौर पर ERROR, BASIC, STATE_CHANGE और EXCEPTION के साथ काम करता है, लेकिन इसे डिबग डायलॉग (या रजिस्ट्री / आईएनआई / सीएफजी सेटिंग, जहां ये चीजें सेव हो जाती हैं) के माध्यम से फील्ड में बदला जा सकता है।
ओह और एक बात - मेरा डिबग सिस्टम प्रति दिन एक फ़ाइल उत्पन्न करता है। आपकी आवश्यकताएं अलग हो सकती हैं। लेकिन सुनिश्चित करें कि आपका डिबग कोड हर फ़ाइल को उस दिनांक के साथ शुरू करता है , जो आपके द्वारा चलाए जा रहे कोड का संस्करण है, और यदि संभव हो तो ग्राहक आईडी, सिस्टम का स्थान या जो भी हो। आप फ़ील्ड से आने वाली लॉग फ़ाइलों का एक मैश-मैश प्राप्त कर सकते हैं, और आपको कुछ रिकॉर्ड की आवश्यकता है कि वे कहाँ से आए हैं और सिस्टम का कौन सा संस्करण वे चला रहे हैं जो वास्तव में डेटा में ही है, और आप ग्राहक पर भरोसा नहीं कर सकते हैं। / फील्ड इंजीनियर आपको यह बताने के लिए कि उन्हें क्या संस्करण मिला है - वे आपको बता सकते हैं कि उन्हें कौन सा संस्करण मिला है। इससे भी बदतर, वे डिस्क पर है कि exe संस्करण की रिपोर्ट कर सकते हैं, लेकिन पुराने संस्करण अभी भी चल रहा है क्योंकि वे बदलने के बाद रिबूट करना भूल गए। अपना कोड आपको खुद बताएं।
अंत में, आप नहीं चाहते कि आपका कोड स्वयं की समस्याएं उत्पन्न करे, इसलिए इतने दिनों या हफ्तों के बाद लॉग फ़ाइलों को शुद्ध करने के लिए एक टाइमर फ़ंक्शन में रखें (बस फ़ाइल निर्माण के समय और समय के बीच का अंतर देखें)। यह एक सर्वर ऐप के लिए ठीक है, जो हर समय चलता रहता है, क्लाइंट साइड ऐप पर आप किसी भी पुराने डेटा को शुरू करने के बाद प्राप्त कर सकते हैं। हम आम तौर पर 30 दिनों या उसके बाद शुद्ध करते हैं, एक सिस्टम पर लगातार इंजीनियर यात्राओं के बिना आप इसे लंबे समय तक छोड़ना चाह सकते हैं। जाहिर है यह आपकी लॉग फ़ाइलों के आकार पर भी निर्भर है।