log4net बनाम Nlog


355

किसी के पास दोनों के लिए अनुभव है? वे एक-दूसरे के खिलाफ कैसे ढेर हो जाते हैं?

हम उनमें से एक उद्यम अनुप्रयोग में प्रवेश करने के लिए उपयोग करने की योजना बना रहे हैं।

संदर्भ:

log4net

nlog

संपादित करें: हमारे पास nlog या log4net के लिए कोई मौजूदा निर्भरता नहीं है।


9
यह वह लकड़हारा है जिसका मैं उपयोग करता हूं: System.IO.File.AppendAllText (@ "c: \ log.txt", string.Format ("{0} \ r \ n", संदेश));
जुमलीफेगार्ड

213
आपके लिए अच्छा है, लेकिन कुछ लोगों को अलग-अलग लॉग स्तरों का उपयोग करने, पुराने लॉग डेटा को स्वचालित रूप से हटाने के लिए, गतिशील रूप से लॉग ऑन / ऑफ करने की क्षमता की आवश्यकता हो सकती है,
टॉर होवलैंड

23
यह ध्यान दिया जाना चाहिए कि Log4Net प्रलेखन भयानक है।
बेंटऑनकोडिंग

एक विस्तृत ब्लॉग पोस्ट है robertmccarter.com/switching-to-nlog
माइकल फ्रीजिम

2
आप एक कोशिश ReflectInsight देना चाहिए। बहुत अधिक शक्तिशाली है, तो दोनों अंतर्दृष्टि। तनाव। Com
कोड 5

जवाबों:


383

मुझे हाल ही में एक आगामी परियोजना के लिए "कुछ लॉगगिन को प्रोटोटाइप" करने का काम सौंपा गया था। मेरे पास कोई लॉगिंग फ्रेमवर्क अनुभव नहीं था। मैंने कुछ दिनों के लिए Log4Net, NLog, और एंटरप्राइज लाइब्रेरी पर ट्यूटोरियल, टॉय ऐप्स, आदि के माध्यम से शोध किया। 3-4 सप्ताह बाद वापस आया और उन्हें एक साथ एक कोसिव डेमो में रखा। उम्मीद है कि इसमें से कुछ आपके लिए उपयोगी है।

हमारी परियोजना के लिए मेरी सिफारिश यह है:

  1. एक प्रवेश मुखौटा (जैसे प्रयोग करें Common.Logging , SimpleLoggingFacade ) प्रत्यक्ष निर्भरता से बचने के लिए।
  2. यदि हम अन्य सुविधाओं के लिए एंटरप्राइज़ लाइब्रेरी का उपयोग करते हैं, तो लॉगिंग के लिए भी इसका उपयोग करें।
  3. अगर हम Log4Net पर निर्भरता के साथ कुछ का उपयोग कर समाप्त करते हैं, तो Log4Net का उपयोग करें।
  4. यदि उपरोक्त में से कोई नहीं, NLog का उपयोग करें। जिसे मैं पसंद करूंगा।

यह इन निष्कर्षों (राय!) पर आधारित है:

  • सभी 3 चौखटे सक्षम हैं और कुछ परिष्कृत चीजें कर सकते हैं। हम एक गुणवत्ता समाधान चाहते हैं, लेकिन स्पष्ट रूप से अल्ट्रा उच्च प्रदर्शन या 60 प्रकार के इवेंट सिंक की आवश्यकता नहीं है।
  • सभी 3 में बहुत समान मूल अवधारणाएं हैं।
  • प्रत्येक की अपनी शांत चालें होती हैं, जैसे वास्तव में उन्नत रूटिंग, या डायनामिक लॉग फाइलनाम, फ़ाइल ट्रंकटिंग, आदि।
  • सभी 3 अपने तरीके से बहुत अच्छी तरह से प्रलेखित हैं।
  • मेरे जैसे एक पूर्ण नवाब के लिए, वे शुरू में थोड़े अजीब थे। बुनियादी बातों के लिए यहां कोई कठोर अंतर नहीं है। हम इससे उबर पाए।
  • जब कुछ ही हफ्ते बाद चीजों की समीक्षा, NLog था स्पष्ट रूप से सबसे आसान फिर से शुरू करने। मुझे इस पर बहुत कम ब्रश की जरूरत थी। Log4Net के साथ, मुझे जाने के लिए कुछ ऑनलाइन उदाहरणों पर फिर से विचार करना पड़ा। EntLib के साथ, मैंने हार मान ली और ट्यूटोरियल को खरोंच से फिर से किया - मैं पूरी तरह से खो गया था।
  • मैं यह पता नहीं लगा सका कि डेटाबेस में लॉग इन करने के लिए कुछ चीजें करने के लिए एंटिबेल कैसे प्राप्त करें। यह आसान हो सकता है, लेकिन यह मेरी समय सीमा से परे था।
  • Log4Net और NLog में एक छोटा सा इन-कोड पदचिह्न है। EntLib अनचाहा है, लेकिन मैं वैसे भी इस पर एक मुखौटा का उपयोग करेंगे।
  • मैंने एंटलीब को गलती से गलत तरीके से कॉन्फ़िगर किया और यह मुझे रन टाइम पर बताया। Log4Net नहीं किया। मैं NLog के साथ एक आकस्मिक गलत विन्यास नहीं था।
  • EntLib एक अच्छा दिखने वाला app.config संपादक के साथ आता है, जिसकी आपको 100% आवश्यकता है। NLog में एक कॉन्फिग फ़ाइल स्कीमा है जिससे आपको "इंटैलिजेंस" मिलता है। Log4Net नाडा के साथ आती है।

तो जाहिर है मैं अब तक NLog पसंद है। एक और समाधान उपलब्ध होने के बावजूद इसका उपयोग करने के लिए पर्याप्त नहीं है, हालांकि।


19
+1 सच्चे सेपरेशन ऑफ कंसर्न (SoC) के लिए एक मुखौटा बनाने की सिफारिश करने पर, या इसलिए आप अपने डोमेन को पॉलेट न करें।
eduncan911

66
मुखौटा केवल तभी काम करता है जब आप इसे उन नैदानिक ​​मूल्यों को तोड़ने के बिना कर सकते हैं जो कॉल स्टैक पर निर्भर हैं, आदि। मैंने बहुत सारे facades देखे हैं जो इन आवश्यक नैदानिक ​​सुविधाओं को तोड़ते हैं जो कि अच्छा करने के लिए अधिक नुकसान पहुंचाते हैं ...
James

11
Log4Net अभी तक .NET 3.5 SP1 और .NET 4 के क्लाइंट प्रोफाइल का समर्थन नहीं करता है, क्योंकि यह System.Web को संदर्भित करता है। बस यह इंगित करना चाहता था, हालांकि यह वास्तव में 'Log4Net पर निर्भरता के साथ, Log4Net का उपयोग करें' से निकटता से संबंधित है।
साइमन डी।

59
NLog सक्रिय रूप से समर्थित है ( nlog-project.org/download ) जबकि Log4Net को अपडेट नहीं किया गया है क्योंकि संस्करण 1.2.10 को 19 अप्रैल, 2006 को प्रकाशित किया गया था ( मुद्दों .apache.org/jira/browse/LOG4NET/fixforvit/ 11/ 11128 )
जे सिनकोटा

5
यदि आपके पास log4net का उपयोग करते हुए एक पुस्तकालय पर निर्भरता है और इसके बजाय (या इसके विपरीत) NLog का उपयोग करना चाहते हैं, तो दो को पाटने के लिए एक कस्टम परिशिष्ट वर्ग को लिखना और कॉन्फ़िगर करना काफी सरल है।
dbkk

158

एक महत्वपूर्ण विचार जो बहुत चर्चा में नहीं आया है वह है समर्थन और अपडेट।

19 अप्रैल 2006 को संस्करण 1.2.10 से प्रकाशित होने के बाद Log4Net को अपडेट नहीं किया गया है

इसके विपरीत, 2006 से NLog को सक्रिय रूप से समर्थित किया गया है, जल्द ही NLog 2.0 को कई प्लेटफार्मों का समर्थन करेगा, जो लॉग 4नेट अंतिम बार होने पर मौजूद नहीं थे :

  • NET फ्रेमवर्क 2.0 SP1 और ऊपर, 3.5 और 4.0 (क्लाइंट और विस्तारित प्रोफ़ाइल)
  • सिल्वरलाइट 2.0, 3.0, 4.0
  • .NET कॉम्पैक्ट फ्रेमवर्क 2.0, 3.5
  • मोनो 2.x प्रोफ़ाइल

30
लेकिन क्या इसे अद्यतन करने की आवश्यकता है? अगर यह टूटा नहीं है, तो इसे ठीक न करें?
ग्लेननरू

24
यह है टूट: Vista और Win7 पर स्थानीय होस्ट के लिए IPv4 / IPv6 के बीच * खराब करता है आईपी पते के संकल्प (कई अनौपचारिक पैच के आसपास चल रहे हैं) * नेट 4.0 ग्राहकों का प्रोफाइल में संकलन नहीं करता है
Tormod Hystad

6
Log4Net के लिए कार्यों में .NET 4.0 संस्करण प्रतीत होता है।
गुंजाइश_क्रिप

38
log4net ने अक्टूबर 2011 को v1.2.11 लॉन्च किया है । मुझे लगता है कि यह उत्तर अब अप्रचलित है।
Mariano Desanze

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

97

हाल ही में दोनों ढांचे के साथ एक अनुभव होने के बाद, मैंने सोचा कि मैं प्रत्येक रूपरेखा पर अपने विचार साझा कर सकता हूं।

मुझे मौजूदा वेब एप्लिकेशन के लिए लॉगिंग फ्रेमवर्क का मूल्यांकन करने के लिए कहा गया था, मैंने विभिन्न ऑनलाइन मंचों से गुजरने के बाद अपनी पसंद को NLog (v2.0) और log4net (v1.2.11) तक सीमित कर दिया। यहाँ मेरे निष्कर्ष हैं:

  1. NLog के साथ सेटिंग करना / शुरू करना आसान है। आप उनकी वेबसाइट पर गेटिंग स्टार्ट ट्यूटोरियल के माध्यम से जाते हैं और आप काम करते हैं। आप एक उचित विचार प्राप्त करते हैं, कि बात कैसे हो सकती है। विन्यास फाइल इतनी सहज है कि कोई भी विन्यास को समझ सकता है। उदाहरण के लिए: यदि आप आंतरिक लॉगिंग को सेट करना चाहते हैं, तो आप ध्वज को Nlog config फाइल के हेडर नोड में सेट करते हैं, जो कि आप इसे होने की उम्मीद करेंगे। Log4net में, आप web.config के ऐपसेटिंग सेक्शन में विभिन्न झंडे सेट करते हैं।

  2. Log4net में, आंतरिक लॉगिंग आउटपुट आउटपुट टाइमस्टैम्प जो कष्टप्रद है। Nlog में, आपको टाइमस्टैम्प के साथ एक अच्छा लॉग मिलता है। मुझे अपने मूल्यांकन में यह बहुत उपयोगी लगा।

  3. Log4net में फिल्टर - आप बेहतर इस सवाल की जाँच करें - log4net फ़िल्टर - लॉग संदेशों को अनदेखा करने के लिए कैसे लिखें और फ़िल्टर करें और यदि आपको इसके लिए कोई उत्तर / समाधान मिल जाए, तो कृपया मुझे बताएं। मैं समझता हूं, इस प्रश्न के लिए एक समाधान है, जैसा कि आप अपना स्वयं का कस्टम फ़िल्टर लिख सकते हैं। लेकिन कुछ ऐसा जो log4net में आसानी से उपलब्ध नहीं है।

  4. प्रदर्शन - मैंने एक संग्रहीत कार्यविधि का उपयोग करके डेटाबेस में लगभग 3000 लॉग संदेश लॉग किए। मैंने लूप के लिए सरल का उपयोग किया (int i = 0; i <3000; i ++ ... एक ही संदेश को 3000 बार लॉग करने के लिए। लिखने के लिए: log4net AdoAppender ने NLog की तुलना में लगभग दोगुना समय लिया।

  5. Log4net एसिंक्रोनस ऐपेंडर को सपोर्ट नहीं करता है।

मेरे लिए एनगॉग को लॉगिंग फ्रेमवर्क के रूप में चुनना पर्याप्त था। :)


log4net के आंतरिक डिबगिंग लॉग: logging.apache.org/log4net/release/sdk/...
नारायण Akhade

36

देर से इस धागे को पाने वाले किसी के लिए, आप .Net बेस क्लास लाइब्रेरी (BCL) पर एक नज़र डालना चाहते हैं। TraceSource क्लास शुरू होने (2005) के बीच कई लोगों ने .Net 1.1 और .Net 2.0 के बीच बदलावों को याद किया ।

TraceSource का उपयोग अन्य लॉगिंग फ्रेमवर्क के लिए विनम्र है, लॉगिंग के दानेदार नियंत्रण के साथ, app.config / web.config में कॉन्फ़िगरेशन, और प्रोग्रामेटिक एक्सेस - एंटरप्राइज़ एप्लिकेशन ब्लॉक के ओवरहेड के बिना।

वहाँ भी तुलना की एक संख्या के आसपास चल रहे हैं: "Log4net बनाम TraceSource"



34

हमारे लिए, मुख्य अंतर समग्र में है ...

Logger.IsDebugEnabledNLog बनाम Log4Net पर एक नज़र डालें , हमारे परीक्षणों से, NLog में कम ओवरहेड है और यही हम (कम-विलंबता सामान) के बाद हैं।

चीयर्स, फ्लोरियन


25

पहले अपने स्टैक के बाकी हिस्सों को देखें।

यदि आप NHibernate का उपयोग कर रहे हैं, तो यह सीधे Log4Net का उपयोग करता है। अन्य रूपरेखाओं में अन्य विशिष्ट लॉगर हो सकते हैं जिनकी उन्हें आवश्यकता होती है।

उसके अलावा: दोनों ठीक काम करते हैं।

मैं खुद Log4Net पर बस गया हूं। यह कॉन्फ़िगर करने के लिए एक दर्द हो सकता है, और अगर इसे सही ढंग से कॉन्फ़िगर नहीं किया गया है तो यह पता लगाने के लिए एक दर्द है कि क्या गलत हुआ। लेकिन आप इसे एक लकड़हारे से कुछ भी करवा सकते हैं।

यदि आपके पास Log4Net के साथ कोई स्थायी समस्या नहीं है, तो यहां एक लेख है जो मैंने लिखा है कि इसे कैसे शुरू किया जाए: http://elegantcode.com/2007/12/07/getting-started-with-log4net/


9
@ समूह: ध्यान दें कि NHibernate v3 में log4net पर निर्भरता शुक्र से हटा दी गई है - यह प्लग करने योग्य है ताकि आप चाहें तो NLog का उपयोग कर सकें।
UpTheCreek

NLog कॉन्फ़िगर करने के लिए एक समान दर्द है / यह भी पता लगाना कि क्या गलत है। कम से कम log4net के साथ आप मुद्दों के लिए प्रलेखन और Google पा सकते हैं।
मृकफ

अपने बाकी के ढेर को ध्यान में रखने पर अच्छी बात है, मैं यह नहीं कह सकता कि एक चिंता है जो मैंने अपने सिर के ऊपर से माना होगा। हालांकि ऐसा लग रहा है कि NHibernate अब इस परिदृश्य के लिए एक उदाहरण नहीं है, Sitecore इसका एक समकालीन उदाहरण प्रदान करता है, क्योंकि यह Log4Net आंतरिक रूप से उपयोग करता है। Sitecore बहुत एक्स्टेंसिबल है, इसलिए आप जो भी लॉग इन करना पसंद करते हैं, उसका उपयोग कर सकते हैं, लेकिन यह साइट के web.config को संपादित करने की तुलना में कहीं अधिक जटिल है, अपने स्वयं के लॉगर को जोड़ने के लिए
स्कॉट सिमॉन्टिस

16

खैर .. मैंने डेटाबेस लॉगिंग कार्यों के लिए एंटरप्राइज लाइब्रेरी का इस्तेमाल किया और अब मैं प्रदर्शन की अड़चन के कारण NLog में बदल गया।

कुछ तुलना जानकारी:

http://pauliusraila.blogspot.com/2010/10/solving-database-logging-bottlenecks.html


14

मैं उपरोक्त प्रतिध्वनि करता हूं और nLog को प्राथमिकता देता हूं। एंटलीब अनावश्यक रूप से फूला हुआ है।

पुन: Log4net एक चीज जो ALWAYS मुझे Log4net के साथ मिलती है वह घटक को जोड़ने के लिए global.asax में निम्नलिखित जोड़ना भूल रही है:

log4net.Config.XmlConfigurator.Configure();

13

अगर आप यहां जाएं तो आप एक व्यापक मैट्रिक्स पा सकते हैं जिसमें NLog और Log4Net दोनों लिबास के साथ-साथ एंटरप्राइज लीब और अन्य उत्पाद शामिल हैं।

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

सादर


1
उस मैट्रिक्स को देखते हुए यह कम से कम द ऑब्जेक्ट गाय के ढांचे के संबंध में काफी पुराना लगता है, जो एक वाणिज्यिक प्रतियोगी है।
एंडी डेंट

9

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

इसलिए मुझे NLog पसंद है।


22
इसे रोकने के लिए अपने लॉक-इन करने के लिए अपने लॉक-ऑन कॉन्फ़िगरेशन में <lockingModel प्रकार = "log4net.Appender.FileAppender + MinimalLock" /> जोड़ें (यहाँ log4net उदाहरण पृष्ठ पर उल्लेख किया गया है: logging.apache.org/log4net/release/config-examples.html )
EventHorizon

9

एक खुले स्रोत परियोजना के लिए बेशर्म प्लग जो मैं चला रहा हूं, लेकिन जीवंत चर्चा को देखते हुए जिसके बारे में .NET लॉगिंग फ्रेमवर्क अधिक सक्रिय है मैंने सोचा कि मैं सेरिलॉग के लिए एक अनिवार्य लिंक पोस्ट करूंगा

किसी एप्लिकेशन के भीतर उपयोग करने के लिए, Serilog log4net के समान है (और भारी खींचता है)। अन्य .NET लॉगिंग विकल्पों के विपरीत, हालांकि, सेरिलॉग ऑफ़लाइन विश्लेषण के लिए लॉग इवेंट की संरचना को संरक्षित करने के बारे में है। जब आप लिखते हैं:

Log.Information("The answer is {Answer}", 42);

अधिकांश लॉगिंग लाइब्रेरी तुरंत संदेश को एक स्ट्रिंग में प्रस्तुत करती हैं। Serilog वह भी कर सकता है, लेकिन यह { Answer: 42 }संपत्ति को संरक्षित करता है ताकि बाद में, कई NoSQL डेटा स्टोर में से एक का उपयोग करके, आप ठीक से मूल्य के आधार पर घटनाओं को क्वेरी कर सकेंAnswer

हम 1.0 के करीब हैं और सभी आधुनिक (.NET 4.5, विंडोज स्टोर और विंडोज फोन 8) प्लेटफार्मों का समर्थन करते हैं।


लेकिन सवाल यह है कि क्या यह मोनो का समर्थन करता है? ;) यह आशाजनक लग रहा है (और मुझे धागा और सुई लोगो से प्यार है), लेकिन इस बारे में कोई जानकारी नहीं मिल सकी कि यह मोनो का समर्थन करता है या नहीं।
राखोकगेल

अच्छा सवाल :) ... हां, हमारे पास मोनो पर उपयोगकर्ता हैं - मुझे यकीन नहीं है कि वे .NET 4.5 या 4.0 का निर्माण सेरिलॉग का उपयोग कर रहे हैं, लेकिन यदि आप किसी भी मुद्दे को हिट करते हैं तो हम मदद करेंगे।
निकोलस ब्लमहार्ट

.NET 4.5 का समर्थन मुझे मिला, अभी डाउनलोड कर रहा हूं और आपके समाधान की कोशिश कर रहा हूं
मोटा शोगुन

8

मैं दूसरा NLog भी करता हूं क्योंकि यह अप्रबंधित कोड के साथ भी काम करता है। मुझे लगता है कि यह log4net और log4cxx को एक साथ उपयोग करने के लिए कब्जे में हो सकता है, लेकिन NLog बॉक्स से प्रबंधित और अप्रबंधित कोड दोनों को संभालता है।

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


4

आप Microsoft एंटरप्राइज़ लाइब्रेरी लॉगिंग ब्लॉक पर भी विचार कर सकते हैं । यह अच्छा डिजाइनर के साथ आता है।


3
XML को हस्तलिखित करने के विरोध में आपको इसे कॉन्फ़िगर करने में सक्षम बनाता है। आपके स्वाद पर निर्भर करता है ...
राशेक

13
ऐसी चीज के लिए दृश्य साधनों का उपयोग करने का विचार अच्छी बात नहीं है।
एडम डिमिट्रुक 22

4
शायद अच्छी बात नहीं है, लेकिन EntLib के लिए विजुअल कन्फिगरेटर आवश्यक है। मैन्युअल रूप से कॉन्फ़िगरेशन लिखना व्यावहारिक रूप से असंभव है, यह बहुत जटिल है (आप जानते हैं, यह Microsoft से है)।
पावेल होडेक

1
यहां तक ​​कि अगर किसी को एक दृश्य डिजाइनर पसंद नहीं था, तो डाउनवोट क्यों! : ओ
नफ़्फ़ल

EntLib, समान रूप से लॉगिंग करता है, यह अनिवार्य रूप से प्रदर्शन को मार सकता है।
माइकल फ्रीजिम

2

मुझे लगता है कि आम सहमति यह है कि nlog को कॉन्फ़िगर और उपयोग करना थोड़ा आसान है। दोनों हालांकि काफी सक्षम हैं।


0

मेरे अनुभव के आधार पर, SmartInspect NLog और log4net दोनों को हराता है।

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

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


11
यह एक पेड प्रोडक्ट है। NLog और Log4Net मुफ़्त हैं।
Zo है 7
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.