2010-01-18 11 views
10

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

ए हर बार जब मैं अपने लॉग में लिखना चाहता हूं, फ़ाइल खोलें, इसे पर लिखें, फिर इसे सीधे बंद करें ताकि किसी महत्वपूर्ण विफलता या क्रैश के मामले में जानकारी खोने का कोई वास्तविक मौका न हो।

बी समय-समय पर सहेजें, शायद प्रत्येक प्रमुख अनुभाग को समाप्त होने के बाद का अर्थ है कि मैं त्रुटियों को कम कर सकता हूं।

कोई अन्य सुझाव ?? मैं टेक्स्ट की बड़ी मात्रा के साथ पूरे दिन खोलना और सहेजना नहीं चाहता हूं, मुझे रिकॉर्ड करने की आवश्यकता है, लेकिन मैं जानकारी की मेरी ग्रैन्युलरिटी खोना नहीं चाहता हूं। मैं सी ++ में लिख रहा हूं, क्षमा करने के लिए खेद है।

उत्तर

5

मेरे ज्ञान के लिए, यह स्ट्रीम के बराबर होने के लिए स्ट्रीम स्ट्रीम के लिए काफी आम (अनिवार्य?) है।

है, आप जब कहते हैं:

file.flush(); 

सब कुछ लिखा होना लिखा है इंतज़ार कर रहे। ध्यान दें कि std::endl; भी flush पर कॉल करता है। तो, इसे खोलें और जानकारी के डंप के बाद बस फ्लश करें।

+0

वैसे मैंने पहले से ही मूल पाठ लॉगर लिखा है, लेकिन मुझे लगता है कि इस परियोजना के बाद भविष्य में मैं पुस्तकालय का उपयोग करूँगा, इसलिए उन लोगों के लिए धन्यवाद जिन्होंने मेरे लिए उन पुस्तकालयों को छोड़ दिया। – Craig

0

यूनिक्स सिस्टम पर, आपके पास सिसलॉग (जिसे संयोग से दोनों लाइब्रेरी कॉल, ओपनलॉग और क्लोजलॉग और एक सेवा के साथ) कहा जाता है। विंडोज़ में मेरा मानना ​​है कि इवेंट लॉग है, हालांकि उस के लिए एपीआई नहीं पता।

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

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

+0

बड़ी छवियों (3 जीबी +) का उपयोग करके और यह कई प्रक्रियाओं, विभाजन, उप डाइविंग मैनिप्लेशंस का उपयोग करके छवि प्रसंस्करण की एक बड़ी मात्रा है। साथ ही साथ छवियां जो बड़ी बाइनरी फ़ाइलों (ज्यादातर ऊंचाई डेटा और देशांतर और अक्षांश) और स्ट्रिंग प्रसंस्करण फ़ाइलों के रूप में संग्रहीत हैं जिनके बारे में छवियों के बारे में जानकारी है। – Craig

2

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

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

1

ए हर बार जब मैं अपने लॉग में लिखने के लिए, फ़ाइल को खोलने के लिए, यह करने के लिए लिखना तो यह सीधे बंद तो यह है एक महत्वपूर्ण के मामले में जानकारी खोने का कोई असली मौका चाहते हैं विफलता या क्रैश।

बी सहेजें समय-समय पर, शायद के बाद हर प्रमुख खंड समाप्त कर दिया गया है जिसका अर्थ है मैं चढ़ाव जहां त्रुटियाँ हैं संकीर्ण कर सकते हैं।

कोई अन्य सुझाव ??

बस अपने दिमाग को थोड़ी देर तक रैक करें - आप दर्जनों अन्य विचारों के साथ आ जाएंगे। समस्या यह है कि एक लॉगर लिखना जटिल हो सकता है जितना आप चाहते हैं - लॉगर्स स्वयं सॉफ्टवेयर के पूर्ण टुकड़े बन सकते हैं।

Here एक लेख जो मुझे लॉगर वर्गों के डिजाइन पर पसंद आया। जरा देखो तो।

यदि आप लॉगिंग के लिए नए मॉड्यूल के निर्माण का समर्थन करने के लिए बैंडविड्थ नहीं चाहते हैं, तो मौजूदा लाइब्रेरी के लिए जाएं क्योंकि अन्य ने पहले से ही सुझाव दिया है।

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

उम्मीद है कि इससे मदद मिलती है।

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