2009-04-16 17 views
140

मैं हर समय लॉग 4नेट का उपयोग करता हूं, लेकिन एक चीज जिसे मैंने कभी नहीं सोचा है यह है कि अंदर क्या हो रहा है यह बताना है। उदाहरण के लिए, मुझे अपने प्रोजेक्ट में एक कंसोल एपेंडर और डेटाबेस एपेंडर मिला है। मैंने डेटाबेस और कोड में कुछ बदलाव किए हैं, और अब डेटाबेस एपेंडर अब काम नहीं करता है। मैं अंततः क्यों पता लगाऊंगा, लेकिन अगर मैं देख सकता हूं कि log4net के अंदर क्या हो रहा है तो यह बहुत मदद करेगा।log4net समस्याओं को ट्रैक करने के लिए कैसे करें

क्या लॉग 4नेट किसी भी प्रकार का आउटपुट उत्पन्न करता है जिसे मैं अपनी समस्या का स्रोत निर्धारित करने के लिए देख सकता हूं? तब

<configuration> 
    <appSettings> 
     <add key="log4net.Internal.Debug" value="true"/> 
    </appSettings> 
</configuration> 

, फ़ाइल जिसमें आप को बचाने के लिए उत्पादन आप एक ही .config फ़ाइल में निम्न कोड जोड़ सकते हैं चाहते हैं निर्धारित करने के लिए:

उत्तर

224

सबसे पहले आप आवेदन विन्यास फाइल पर यह मान सेट करने के लिए है :

<configuration> 
... 

<system.diagnostics> 
    <trace autoflush="true"> 
     <listeners> 
      <add 
       name="textWriterTraceListener" 
       type="System.Diagnostics.TextWriterTraceListener" 
       initializeData="C:\tmp\log4net.txt" /> 
     </listeners> 
    </trace> 
</system.diagnostics> 

... 
</configuration> 

आप के तहत एक अधिक विस्तृत विवरण प्राप्त कर सकते हैं 'मैं कैसे log4net सक्षम कर सकता आंतरिक डिबगिंग?' log4net FAQ page में।

+7

बस यह सुनिश्चित करें कि जिस प्रक्रिया में आपका एप्लिकेशन चल रहा है, उस पथ के अधिकार हैं जहां आप अपनी लॉगिंग टेक्स्ट फ़ाइल ("सी: \ tmp \ log4net.txt" ऊपर उदाहरण में बनाना चाहते हैं) – Jtrx

+0

यह गायब है मेरे ऐप पर क्या हो रहा है यह जानने के लिए टिप: डी – NFRiaCowboy

+2

ऐसा लगता है कि आंतरिक डिबगिंग में टाइमस्टैम्प नहीं हैं – snit80

15

उपरोक्त उत्तर के अतिरिक्त, आप इस पंक्ति का उपयोग c: \ tmp \ log4net.txt आउटपुट के बजाय रीयलटाइम में लॉग देखने के लिए कर सकते हैं।

log4net.Util.LogLog.InternalDebugging = true; 

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

24

आप एक log4net config फ़ाइल का उपयोग कर रहे हैं, तो आप भी डिबगिंग के बारे में वहाँ के लिए शीर्ष नोड बदलकर कर सकते हैं:

<log4net debug="true"> 

यह काम करेंगे एक बार config पुनः लोड कर रहा है और अपने निशान श्रोता संभालने सेटअप ठीक है ।

0

यदि आंतरिक लॉग आपको पर्याप्त जानकारी नहीं देता है, तो source code को बनाना और डीबग करना बहुत आसान है। यदि आप इसे अपने विकास प्रोजेक्ट के साथ मिश्रित नहीं करना चाहते हैं, तो एक सरल कंसोल एप्लिकेशन जोड़ें जो सिर्फ एक संदेश लॉग करता है, इस एप्लिकेशन में अपनी परियोजना के log4net.config की प्रतिलिपि बनाएँ, और प्रश्न में कक्षा को डीबग करें।

0

सुनिश्चित करें कि रूट एप्लिकेशन जहां आपका प्रवेश बिंदु log4net पर कुछ लॉग करता है। इसे इनमें से एक दें:

private static ILog logger = LogManager.GetLogger(typeof(Program)); 
static void Main(string[] args) 
{ 
    logger.InfoFormat("{0} v.{1} started.", Assembly.GetExecutingAssembly().GetName().Name, Assembly.GetExecutingAssembly().GetName().Version.ToString()); 

2.0.8 के साथ, मुझे एक दिलचस्प स्थिति थी। मैंने एक लाइब्रेरी प्रोजेक्ट और एक टेस्ट एक्स प्रोजेक्ट बनाया जो इसकी क्षमताओं को प्रदर्शित करेगा। लाइब्रेरी प्रोजेक्ट को लॉग 4नेट का उपयोग करने के लिए एक्सई प्रोजेक्ट के रूप में स्थापित किया गया था। Exe प्रोजेक्ट ने कॉन्फ़िगरेशन पंजीकृत करने के लिए assemblyinfo विशेषता का उपयोग किया, फिर भी मुझे कंसोल या लॉग फ़ाइल में कोई लॉगिंग आउटपुट नहीं मिला। जब मैंने log4net आंतरिक डीबग लॉगिंग चालू की, तो मुझे कंसोल पर कुछ आंतरिक संदेश लिखे गए, लेकिन फिर भी मेरे सामान्य लॉग में से कोई भी नहीं। कोई त्रुटि की सूचना नहीं दी जा रही थी। जब मैंने उपरोक्त कोड को मेरे प्रोग्राम में जोड़ा तो यह सब काम करना शुरू कर दिया। Log4net अन्यथा सही ढंग से सेटअप किया गया था।

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