2009-06-28 10 views
10

मैं एक सर्वर पर काम कर रहा हूं और मैं लॉगिंग लागू करना शुरू कर रहा हूं। हालांकि, मुझे यकीन नहीं है कि मुझे लॉगिंग के लिए डीबी का उपयोग करना चाहिए, या सिर्फ एक सादे टेक्स्ट फ़ाइल।सर्वर लॉगिंग - डेटाबेस या लॉगफाइल में?

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

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

(यदि यह एक फर्क नहीं पड़ता, मैं mod_python एक MySQL डाटाबेस के साथ एक अपाचे सर्वर पर उपयोग कर रहा हूँ। तो मैं या तो logging पुस्तकालय का उपयोग किया था या सिर्फ DB में कुछ लॉगिंग तालिका बनाने।)

+1

आप SQLite के बीच कहीं कहीं जा सकते हैं: "डेवलपर्स के रूप में fopen() को प्रतिस्थापित करने के लिए डिज़ाइन किया गया है। –

उत्तर

10

सबसे पहले, लॉगिंग लाइब्रेरी जैसे SLF4J/लॉगबैक का उपयोग करें जो आपको इस निर्णय को गतिशील रूप से करने की अनुमति देता है। फिर आप कॉन्फ़िगरेशन फ़ाइल को ट्वीक कर सकते हैं और अपने कुछ या सभी लॉग संदेशों को कई अलग-अलग गंतव्यों में से प्रत्येक पर रूट कर सकते हैं।

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

"फ़ाइल सिस्टम पर लॉग इन करना" बहुत बेहतर है (जो बड़े उत्पादन वातावरण के लिए अनावश्यक लॉग एग्रीगेशन सर्वर द्वारा पढ़े गए मल्टीकास्ट पते पर लॉगिंग शामिल है)।

लॉग फ़ाइलों को विशेष विश्लेषिकी डेटाबेस में पढ़ा जा सकता है जहां आप उपयोग कर सकते हैं उदाहरण के लिए, हैडोप मानचित्र डेटा/लॉग डेटा के विश्लेषण को कम करने के लिए उपयोग कर सकते हैं।

+1

स्प्लंक जैसे syslog सर्वर पर लॉग ऑन करें, यह कई लॉग प्रारूपों का समर्थन करता है और आप वहां डेटाबेस लॉग के साथ-साथ http सर्वर भी बना सकते हैं, फिर आप एक अच्छा उपयोग करने योग्य gui से संदर्भ पार कर सकते हैं। सुनिश्चित करें कि आप एसिंक लॉगिंग का उपयोग कर रहे हैं (log4j और मुझे लगता है कि कई अन्य लोगों के पास उस तरह का एपेंडर है)। – feniix

+1

एसएलएफ 4 जे/लॉगबैक जावा आधारित समाधान हैं। पायथन एक व्यापक लॉगिंग मॉड्यूल अंतर्निहित है। –

+0

@ जॉन: यह अद्भुत है, जावा का लॉगिंग तीन मुख्य दावेदारों (java.util.logging, log4J, जकार्ता कॉमन्स लॉगिंग) के बीच काफी खंडित है। एसएलएफ 4 जे इन सभी को सुसंगत रूप से एकीकृत करने का प्रयास है। पाइथन टीम ऐसा करने के लिए बहुत बुद्धिमान थी। –

1

हमने हमेशा अलग डेटाबेस पर डेटा लॉग किया है।

यह हमें एप्लिकेशन डेटाबेस को प्रभावित किए बिना क्वेरी करने देता है। यह चीजों को भी सरल बनाता है अगर हमें एहसास हो कि हमें लॉगिंग को अक्षम करने या हमारे द्वारा लॉग किए जाने वाले राशि को बदलने की आवश्यकता है।

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

Logger आपको अपने लॉगिंग को प्रबंधित करने के कई तरीके प्रदान करता है, और हालांकि डिफ़ॉल्ट पैकेज में डेटाबेस लॉगर नहीं है, ऐसे ईवेंट हैंडलर को लिखना मुश्किल नहीं होगा।

2

मिक्स file.log + डीबी सबसे अच्छा होगा। डीबी सूचना में लॉग इन करें जिसे आपको अंततः विश्लेषण करने की आवश्यकता हो सकती है, उदाहरण के लिए प्रति दिन उपयोगकर्ताओं की औसत संख्या आदि। और कुछ डीबग जानकारी स्टोर करने के लिए file.log का उपयोग करें।

1

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

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

1

डीबी को केवल तभी लॉग इन करें जब यह राजस्व उत्पन्न करता है।

उदाहरण के लिए, एक साइट के लिए, हमने किसी वेब साइट पर डेटाबेस में रखे गए सभी विज्ञापनों को लॉग इन किया है। यह राजस्व उत्पन्न हुआ। महत्वपूर्ण कुछ के लिए लॉग फ़ाइलों को पार्स करने का कोई कारण नहीं है।

बाकी सब कुछ फाइल सिस्टम पर जाता है।

डीबगिंग के लिए फ़ाइल सिस्टम पर लॉग इन करें। यह आम तौर पर निजी सामान है। कार्यान्वयन विवरण। साझा नहीं किया जाना है।

अपाचे फाइल सिस्टम में सामान का पहाड़ लॉग करता है। इसे डुप्लिकेट न करें।

एक्सेस कंट्रोल लॉग फ़ाइल सिस्टम पर जाते हैं।आप शायद ही इन्हें विस्तार से देखना चाहेंगे।

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

0

बस यदि आप किसी डेटाबेस पर लॉग इन करने के लिए मानक पायथन लॉगर को ट्विक करने पर विचार करते हैं, तो यह नुस्खा आपको एक प्रमुख प्रारंभ दे सकता है: Logging to a Jabber account

0

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

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

0

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

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

0

हम दोनों करते हैं।

हम परिचालन सूचना/प्रगति/आदि लॉग इन करते हैं। लॉगफाइल के लिए। मानक लॉगफाइल सामान।

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

0

वास्तव में यह महत्वपूर्ण लगता है कि आप बाद में डीबी/फ़ाइल लॉगिंग के बीच स्विच कर सकते हैं। डाटाबेस लॉगिंग सादा पाठ फ़ाइल लॉगिंग से बहुत धीमी प्रतीत होती है जो उच्च लॉग यातायात के साथ महत्वपूर्ण हो सकती है। मैंने एक पुस्तकालय बनाया है (जो स्टैंडअलोन या हैंडलर के रूप में कार्य कर सकता है) जब मुझे वही आवश्यकता थी। यह डेटाबेस और/या फ़ाइलों में लॉग इन करता है, और महत्वपूर्ण संदेशों को संग्रहीत करने की अनुमति देता है (और संग्रह, उदाहरण के लिए, डेटाबेस हो सकता है, जबकि सब कुछ टेक्स्ट फाइलों में जाता है।) यह आपको स्क्रैच से दूसरे कोडिंग से बचा सकता है ... देखें: The rrlog library

0

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

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