2008-09-27 14 views
15

मुझे लगता है कि मैं आपके आवेदन के लिए लॉगिंग ढांचे के बिंदु को याद कर सकता हूं। सभी छोटे ऐप्स में मैंने हमेशा एक छोटी "लॉगिंग" कक्षा लिखी है और फ़ाइल में लिखी गई विधि में बस लॉग संदेशों को पास कर दिया है।लॉगिंग फ्रेमवर्क का उपयोग करने का क्या मतलब है?

log4net जैसे तृतीय पक्ष लॉगिंग ढांचे का उद्देश्य क्या है? क्या यह लॉगिंग ऑपरेशन लॉगिंग के साथ थ्रेड सुरक्षा है या क्या मुझे कुछ याद आ रहा है?

उत्तर

18

यह एक उत्कृष्ट सवाल है।

पहला कारण है "क्यों नहीं?" यदि आप लॉगिंग फ्रेमवर्क का उपयोग कर रहे हैं, तो आप पहले से पैक किए गए कुछ का उपयोग करने के रखरखाव लाभ काट लेंगे।

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

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

चौथा कारण यह है कि आप syslog में जोड़ना चाहते हैं, या डेटाबेस, या सॉकेट या विभिन्न फ़ाइलों को लिखना चाहते हैं। फ्रेमवर्क में इस कार्यक्षमता का निर्माण किया गया है।

लेकिन वास्तव में, पहला जवाब सबसे अच्छा है; अपने आप को लिखने के लिए बहुत कम लाभ है, और दोषों का एक पूरा समूह है।

3

आप कुछ संदेश के लिए एक डाटाबेस, या एक चेतावनी प्रणाली है कि पृष्ठों के लिए लॉग इन करने के बदल सकते हैं, समर्थन पर गरीब व्यक्ति

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

Log4Net's site है और अधिक विस्तार

1

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

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

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

2

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

2

कुछ अन्य टिप्पणियां छोड़ दी गई हैं: यदि पहले से ही एक पुस्तकालय है जो आप चाहते हैं, यह आपको कोड लिखने के लिए बचाता है।

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

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

1

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

+0

"मस्तिष्क-मृत एक फ़ाइल में संलग्न करने के लिए सरल" - बनाम मल्टीथ्रेड और विशेष रूप से मल्टीकोर जहां थ्रेड वास्तव में एक साथ निष्पादित करते हैं? माइक्रोसॉफ्ट के ईटीडब्ल्यू ईटीडब्ल्यू-प्रविष्टियों के प्रति प्रोसेसर-बफरिंग प्रदान करता है, जो मुझे लगता है कि यह आदर्श समाधान है। – pngaz

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