Log4net समस्याओं को कैसे ट्रैक करें


191

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

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

जवाबों:


293

सबसे पहले आपको एप्लिकेशन कॉन्फ़िगरेशन फ़ाइल पर यह मान सेट करना होगा:

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

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

<configuration>
...

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

...
</configuration>

आप 'कैसे मैं लॉग 4नेट आंतरिक डिबगिंग सक्षम करूं' के तहत अधिक विस्तृत विवरण पा सकते हैं? में log4net FAQ पृष्ठ


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

3
आंतरिक डिबगिंग नहीं करता है की तरह लग रहा timestamps है
snit80

4
मैं से बदल दिया C:\tmp\log4net.txtहै C:\log4net.txt, तो यह पाठ फ़ाइल उत्पन्न कर सकते हैं।
फ्रैंक मायत थू

6
बस एक नोट मुझे मजेदार तरीका लगा। सुनिश्चित करें कि के <configSections></configSections>तहत पहली प्रविष्टि है <configuration>। अन्यथा आप एक त्रुटि के साथ समाप्त होते हैं।
निक

2
यह लॉग फ़ाइल में प्रविष्टियों के लिए समय नहीं दिखाता है। मैंने विशेषताएँ traceOutputOptions="TimeStamp"और टैग सेट करने का प्रयास traceOutputOptions="DateTime"किया है, addलेकिन यह लॉग फ़ाइल सामग्री में कुछ भी नहीं बदलता है। क्या कोई जानता है कि ट्रेस लॉग फ़ाइल में प्रत्येक पंक्ति / प्रविष्टि के लिए समय दिखाने के लिए log4net कैसे सेट करें?
यूलिसिस अल्वेस

43

यदि आप एक log4net config फाइल का उपयोग कर रहे हैं, तो आप टॉप नोड को बदलकर वहां डिबगिंग को भी चालू कर सकते हैं:

<log4net debug="true">

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


6
एक बार यह ध्वज सक्षम हो जाने के बाद - आप Visual Studio की आउटपुट विंडो के भीतर log4net से डायग्नोस्टिक लॉग देख पाएंगे
Naren

24

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

log4net.Util.LogLog.InternalDebugging = true;

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


8

सुनिश्चित करें कि रूट एप्लिकेशन जहां आपका प्रवेश बिंदु 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 के साथ, मेरे पास एक दिलचस्प स्थिति थी। मैंने एक पुस्तकालय परियोजना और एक परीक्षण exe परियोजना बनाई जो इसकी क्षमताओं का प्रदर्शन करेगी। पुस्‍तकालय परियोजना को Log4net का उपयोग करने के लिए स्‍थापित किया गया था जैसा कि निर्गमन परियोजना थी। Exe प्रोजेक्ट ने कॉन्फिगरेशन रजिस्टर करने के लिए असेंबलीफो विशेषता का इस्तेमाल किया, फिर भी मुझे कंसोल या लॉग फाइल में कोई लॉगिंग आउटपुट नहीं मिल रहा था। जब मैंने log4net आंतरिक डिबग लॉगिंग चालू किया, तो मुझे कंसोल पर कुछ आंतरिक संदेश मिले, लेकिन फिर भी मेरा कोई भी सामान्य लॉग नहीं है। कोई त्रुटि नहीं बताई जा रही थी। यह सब तब काम करने लगा जब मैंने उपरोक्त कोड को अपने कार्यक्रम में जोड़ा। Log4net अन्यथा सही ढंग से सेटअप था।


1
बचाया खदान के रूप में अच्छी तरह से :-)
कोस्टा

2

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


2

Log4net 2.0.8 में यह अलग DLL में log4net के साथ लॉगिंग बनाने के लिए संभव नहीं लगता है। अगर मैंने यह कोशिश की, तो परिणाम बहुत अजीब हैं: अब कोई लॉगिंग नहीं की जाती है। और डिबग विकल्प के साथ log4net की आरंभीकरण कोई त्रुटि नहीं दिखाता है।

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

Log4net के अगले संस्करण में, यह बग शायद तय हो जाएगा।

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