2008-10-26 10 views
6

मैं दुकानों जहाँ मैं अपवाद को क्रियान्वित किया है ईवेंट लॉग में हैंडलिंग में काम किया है, और डेटाबेस में एक मेज में।(विंडोज़) अपवाद हैंडलिंग: इवेंट लॉग या डेटाबेस में?

प्रत्येक उनके गुण, जिनमें से मैं अपने अनुभव के आधार पर कुछ प्रकाश डाला सकता है:

ईवेंट लॉग

  • उद्योग अपवाद (+)
  • प्रवेश करने की आसानी के लिए मानक स्थान (+)
  • यहां डेटाबेस कनेक्शन समस्याओं को लॉग कर सकते हैं (+)
  • ईवेंट लॉग (+)
  • के शीर्ष पर रिपोर्ट बनाकर ऐप्स देख सकते हैं 10
  • आवश्यकताओं हर प्लावित किया जाना है तो अक्सर, अगर बहुत वहाँ बताया जाता है (-)
  • के रूप में विस्तृत नहीं एसक्यूएल [एसक्यूएल में विधि नाम जैसी कस्टम फ़ील्ड जोड़ने] प्रवेश करने के रूप में (-)

एसक्यूएल/डाटाबेस

  • के डेटा (+) बड़ी मात्रा में
  • अपवाद के तेजी से मात्रा (+) आवेषण लोड संतुलित पर्यावरण (+) में अपवाद के लिए
  • एकल भंडारण स्थान को संभाल कर सकते हैं
  • संभाल कर सकते हैं
  • बहुत अनुकूलन (+)
  • थोड़ा आसान एसक्यूएल भंडारण (+)
  • से अलग से दूर रिपोर्टिंग/अधिसूचना के निर्माण के लिए जहां ठेठ अपवाद जमा हो जाती है (-)

मैं किसी भी बड़े विचार याद आ रही हूँ ?

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

+1

अक्टूबर 26 या नहीं, लगभग 8 महीने बाद आपके प्रश्न ने मेरा उत्तर दिया। –

उत्तर

4

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

ट्रेसिंग क्या एक डेवलपर में आपकी रुचि है। स्टैक ट्रेस, विधि मानकों, कि वेब सर्वर 401.3 का HTTP स्थिति, आदि लौट आए ये वास्तव में शोर कर रहे हैं, और की एक छोटी राशि में काफी मात्रा में डेटा उत्पादन कर सकते हैं पहर। शोर को काटने के लिए आम तौर पर हमारे पास ट्रेसिंग के विभिन्न स्तर होते हैं।

क्लाइंट ऐप में लॉग इन करने के लिए, मुझे लगता है कि इवेंट लॉग जाने का तरीका है (मुझे दोबारा जांच करना होगा, लेकिन मुझे लगता है कि एएसपी.नेट स्वास्थ्य निगरानी भी इवेंट लॉग में लिख सकती है)। सामान्य उपयोगकर्ताओं को इवेंट लॉग में लिखने की अनुमति होती है, जब तक आपके पास सेटअप (जिसे किसी भी व्यवस्थापक द्वारा इंस्टॉल किया गया हो) ईवेंट स्रोत बनाते हैं।

Sql प्रवेश के लिए अपने लाभ के अधिकांश है, जबकि सच है, घटना लॉगिंग के लिए लागू नहीं कर रहे हैं:

  • डेटा की बड़ी मात्रा संभाल सकता है: तुम सच में बिना क्रिया अपवादों या अन्य उच्च की बड़ी मात्रा में है स्तर विफलताओं?
  • अपवादों के तेज़ वॉल्यूम आवेषण को संभाल सकता है: एक एकल अनचाहे अपवाद आपके ऐप को नीचे लाएगा - यह मूल रूप से सीमित है। गैर डेवलपर्स के लिए अन्य दिलचस्प घटनाओं को समान रूप से समेकित किया जाना चाहिए।
  • बहुत अनुकूलन: इवेंट लॉग में संदेश बहुत अधिक मुफ्त टेक्स्ट है। यदि आपको अधिक जानकारी चाहिए, तो बस एक टेक्स्ट या संरचित XML या बाइनरी फ़ाइल लॉग
  • SQL संग्रहण की रिपोर्टिंग/अधिसूचना बंद करने के लिए थोड़ा आसान: इवेंट लॉग व्यूअर के साथ रिपोर्टिंग बनाई गई है, और अधिसूचना सिस्टम , या तो अंतर्निहित - एक एप्लिकेशन क्रैश के कारण - या अन्य वास्तव में महत्वपूर्ण अधिसूचनाओं के साथ मिश्रित - एक इवेंट लॉग संदेश खोने के लिए थोड़ा बहाना है। कॉरपोरेट या अन्य नेटवर्क किए गए ऐप्स के लिए, एक हजार और 1 अलग-अलग ऐप्स हैं जो त्रुटियों के लिए इवेंट लॉग से पहले से ही कम हो जाते हैं ... संभावना है कि आपका sysadmin पहले से ही एक का उपयोग कर रहा है।

, जिनमें से एक अपवाद या त्रुटियों के विशिष्ट विवरण का एक हिस्सा है अनुरेखण के लिए, मैं फ्लैट फ़ाइलें चाहते - वे बनाए रखने के लिए आराम से, आराम grep के लिए कर रहे हैं, और के लिए Sql में आयात किया जा सकता है अगर मुझे पसंद है तो विश्लेषण।

उस समय का 9 0%, आपको उनकी आवश्यकता नहीं है और वे चेतावनी या त्रुटि पर सेट हैं। लेकिन, जब आप उन्हें INFO या DEBUG पर सेट करते हैं, तो आप डेटा के टन उत्पन्न करेंगे। एक आरडीबीएमएस में बहुत अधिक ओवरहेड है - प्रदर्शन (एसीआईडी, समवर्ती, इत्यादि), भंडारण (लेनदेन लॉग, एससीएसआई RAID-5 ड्राइव, आदि), और प्रशासन (बैकअप, सर्वर रखरखाव, आदि) - जिनमें से सभी हैं ट्रेस लॉग के लिए अनावश्यक।

1

इवेंट लॉग को लिखने के बारे में एक नोट: इसके लिए आपके एप्लिकेशन उपयोगकर्ताओं के लिए कुछ अनुमति की आवश्यकता है कि कुछ वातावरण में डिफ़ॉल्ट रूप से प्रतिबंधित किया जा सकता है।

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

+0

इवेंट लॉग के बारे में बहुत सच है। यदि आपके पास अच्छी तैनाती रणनीति है, तो इसे कम किया जा सकता है। –

2

एक बात यह है कि घटना लॉगिंग के बारे में विचार कर रहा जरूरत है वहाँ उत्पादों वहाँ बाहर (माइक्रोसॉफ्ट संचालन प्रबंधक की तरह) अपने सर्वर इवेंट लॉग की निगरानी कर सकते हैं जो और समझदारी से अधिसूचना करते हैं, और उनकी सामग्री पर आंकड़े एकत्र कर रहे हैं कि है।

एसक्यूएल-आधारित लॉगिंग का एक "शून्य" यह है कि यह आपके आवेदन पर निर्भरताओं की एक और परत जोड़ता है, जो हमेशा स्वीकार्य हो सकता है या नहीं। मैंने अपने करियर में दोनों किया है। मैं एक या दो बार भी लॉग ईवेंट कतार और एक MSSQL डेटाबेस में कतार खाली डीबी से जुड़ा हुआ करने के लिए मेरे क्लाइंट सॉफ्टवेयर की आवश्यकता को समाप्त करने के लिए करने के लिए एक MSMQ आधारित संदेश कतार का इस्तेमाल किया।

3

मैं डेटाबेस में सीधे लॉग नहीं करूंगा।जैसा कि आप कहते हैं, डेटाबेस मुद्दे लॉग इन करने के लिए मुश्किल हो जाते हैं :)

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

रिपोर्ट और देखने क्षुधा किसी डेटाबेस से बहुत आसानी से किया जा सकता है - वहाँ कम लॉग-विशेष रिपोर्टिंग उपकरण इस समय वहाँ हो सकता है लेकिन काफी सभी डेटाबेस सामान्यीकृत रिपोर्टिंग कार्यक्षमता है।

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

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