.net मुझे ट्रेसिंग बनाम लॉगर.नेट, एंटरप्राइज लाइब्रेरी, लॉग 4नेट या उकद आदि डायग्नोस्टिक्स का उपयोग कब करना चाहिए?




log4net enterprise-library (5)

GitHub पर NetLog.Logging पैकेज को देखें, यह मेरी रचना है। इसका एक मॉनिटरिंग ऐप है, और java.util.log एपीआई प्रतिमान का अनुसरण करता है, क्योंकि यही मैं उपयोग करना पसंद करता हूं। यह "लेखन" तक पहुंच के लिए एक स्पिन लॉक है, और लॉक होल्डर आगे बढ़ने से पहले, एक सीमा तक, रिकॉर्ड किए गए सभी रिकॉर्ड लिखता है। यह लॉगिंग I / O के लिए कम विवाद आधारित होने की अनुमति देगा और एक अच्छा समझौता प्रदान करेगा।

मैं मानक अनुरेखण, Logger.NET, Enterprise Library, log4net या Ukadc.Diagnostics के बीच चयन कैसे करूँ?

क्या ऐसी स्थिति है जहां एक दूसरे की तुलना में अधिक उपयुक्त है? ... वो क्या हो सकता है? (ASP.NET, कंसोल ऐप, Azure Cloud, SOHO, Enterprise ...)

लाभ या कमियां क्या हैं?

क्या मुझे कोई अन्य प्रमुख लॉगिंग फ्रेमवर्क याद आया?


Microsoft की बिल्ड 2013 सम्मेलन से सीखी गई कुछ चीजों को जोड़ने के लिए:

  • भारी लोड के तहत Log4NET में मुख्य रूप से एक फाइल लिखना है क्योंकि यह प्रक्रिया सिंक्रोनस है। कुछ स्थितियों में विवाद और समय समाप्त होना संभव है। यह AppDynamics या किसी अन्य समान टूल का उपयोग करके सत्यापित किया जा सकता है।

  • NLog लोडिंग के तहत कतारबद्धता को लागू नहीं करता है, IO कॉल को स्टैक अप करता है।

  • Microsoft के अनुसार, ETW कर्नेल रिंग बफ़र्स का उपयोग करता है जो अत्यधिक कुशल है। .NET 4.5 और सिमेंटिक लॉगिंग एप्लिकेशन Bock (AKA SLAB) के साथ संयुक्त ईवेंट लॉग फ्रेमवर्क इसे और अधिक कुशल बना देगा।


मैं log4j या log4net का प्रशंसक नहीं हूं। मुझे java.util.net लॉगिंग सुविधा पसंद है, और इसलिए मैंने इसे पुनः बनाया है, अधिकांश भाग के लिए, https://github.com/greggwon/NetLog/ पर NetLog नाम के गिथब प्रोजेक्ट पर। प्रतिक्रिया देने के लिए स्वतंत्र महसूस करें। मैं एक logging.properties फ़ाइल के बदले में कॉन्फ़िगरेशन प्रबंधक आधारित कॉन्फ़िगरेशन में डालने के लिए कुछ समय देने की कोशिश कर रहा हूं। Java.util.log के साथ, कमांड लाइन प्रॉपर्टी सेटिंग्स का उपयोग करना हमेशा आसान होता था, यह निर्दिष्ट करने के लिए कि लॉग इन कहां था। यदि आप कॉन्फ़िगरेशन प्रबंधक का उपयोग नहीं करते हैं, तो यह .net के साथ बहुत अधिक दर्दनाक है। सीएम के लिए समर्थन प्रदान करने से, लॉगर और हैंडलर के बीच कुछ अलग रिश्तों के लिए दरवाजा खुल जाएगा जो कुछ चीजों को बेहतर बना सकते हैं।

NetLog में एक EventLogHandler शामिल होता है जो सिस्टम इवेंटलॉग में लॉग इन करेगा। इसका एक Level.EventLog स्तर भी है, जो आपको "चेतावनी" के नीचे सेट करता है, जो आपको "WARNING" या "SEVERE" का उपयोग किए बिना EventLog को लक्षित करने के लिए "नामित" स्तर की अनुमति देगा। मेरे पास एक TCPSocketHandler भी है जो आपको "लॉगिंग" में टेलनेट देता है ताकि आप "पूंछ" प्रोग्राम के बिना "पूंछ" पर उपलब्ध हो सकें।


मैंने अभी VS2010 में log4net का उपयोग करना शुरू किया और पाया कि इसमें System.Web पर निर्भरता है ... जो इसे ".NET xx क्लाइंट प्रोफाइल" फ्रेमवर्क लक्ष्यों के साथ असंगत बनाता है ... यह देखते हुए कि यहां किसी ने विंडोज अपडेट का उपयोग करके विंडोज अपडेट के बारे में क्या पोस्ट किया है। पसंद के .NET पुनर्वितरण के रूप में क्लाइंट प्रोफाइल, इसका मतलब यह है कि log4net अब पसंद का लकड़हारा नहीं हो सकता है यदि आप अपने कोड को मशीनों के बहुमत पर चलाना चाहते हैं ...

अन्य विकल्पों की जानकारी के लिए धन्यवाद - मैं उनकी जाँच करूँगा ...


किसी कारण से, System.Diagnostics एक एकल श्रोता के लिए सभी ट्रेस आउटपुट को निर्देशित करने के तरीके का समर्थन नहीं करता है। यदि आप चाहते हैं कि कई श्रोताओं को एक ही श्रोता के लिए निर्देशित किया जाए, तो आपको प्रत्येक स्रोत को नाम से स्पष्ट रूप से सूचीबद्ध करना होगा।

कई निर्भरताओं के साथ एक बड़ी प्रणाली में, आप सभी स्रोतों को नहीं जान सकते हैं और आप शायद परवाह नहीं करते हैं। आप केवल यह चाहते हैं कि आउटपुट कवर के तहत क्या हो रहा है। प्रत्येक स्रोत के लिए श्रोताओं को व्यक्तिगत रूप से सेट करने से सिस्टम का उपयोग करना पड़ता है। बड़े पैमाने पर सिस्टम में बड़े पैमाने पर उपयोग करने के लिए।

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





system.diagnostics