log4net
Log4Net समस्या निवारण
खोज…
परिचय
Log4net एक असफल-रोक लॉगिंग सिस्टम है। फेल स्टॉप का मतलब है कि यह एक आंतरिक अपवाद पर लॉगिंग को रोकता है और डिजाइन द्वारा प्रोग्राम प्रवाह के साथ बातचीत नहीं करता है। यह जानना आपको समझाता है कि log4net समस्या निवारण इतना आसान नहीं है। यदि लॉगिंग विफल हो जाती है, तो आपका प्रोग्राम नोटिस नहीं करता है। आप इसके बारे में बहुत सारे प्रश्न देखते हैं: मेरा log4net लॉगिंग काम क्यों नहीं कर रहा है? यह आलेख मूल समस्या निवारण और अधिकांश सामान्य समाधान बताता है।
ज्यादातर मामलों में पहला कदम log4net के लिए आंतरिक डिबगिंग को सक्षम करना है।
आंतरिक डीबगिंग सक्षम करें
Log4net में आंतरिक डिबगिंग को सक्षम करने के 2 तरीके हैं:
- एप्लिकेशन की कॉन्फ़िगरेशन फ़ाइल में log4net.Internal.Debug विकल्प निर्दिष्ट करें
- Log4net के आंतरिक डिबग को प्रोग्रामेटिक रूप से सक्षम करें
एप्लिकेशन की कॉन्फ़िगरेशन फ़ाइल में log4net.Internal.Debug विकल्प निर्दिष्ट करें
यह आंतरिक डिबगिंग को सक्षम करने के लिए पसंदीदा तरीका है, आप अनुप्रयोग के log.netfig फ़ाइल में log4net.Internal.Debug कुंजी जोड़ें।
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>
</configuration>
आवेदन शुरू होते ही डिबग लॉगिंग तुरंत शुरू हो जाएगी।
Log4net के आंतरिक डिबग को प्रोग्रामेटिक रूप से सक्षम करें
एक दूसरा तरीका यह है कि यह प्रोग्रामेटिक रूप से किया जाए। Log4net.Util.LogLog.InternalDebugging गुण को सही पर सेट करें:
log4net.Util.LogLog.InternalDebugging = true;
आंतरिक डीबग लॉग आउटपुट
आंतरिक डीबगिंग संदेश कंसोल और System.Diagnostics.Trace के लिए लिखे गए हैं। जब आपको आउटपुट कंसोल करना होता है तो आप System.Console.Out को रीडायरेक्ट कर सकते हैं। या आप ट्रेस संदेश को किसी फ़ाइल में पुनर्निर्देशित कर सकते हैं:
<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 में से कुछ ऐप्पेंडेंट बफ़र्ड ऐपेंडर्स हैं। ये परिशिष्ट केवल तभी लॉग करेंगे जब संदेशों की एक निश्चित मात्रा लॉग की जाती है। कुछ नमूने SmtpAppender, RemotingAppender या AdoNetAppender हैं। इन एपेंडरों की एक सेटिंग है BufferSize:
<bufferSize value="100" />
इसका मतलब यह है कि बफर में 100 संदेश होने पर लकड़हारा लॉग करेगा। जब आप परिशिष्ट का परीक्षण करना चाहते हैं तो आप बफरसिज़ को 1 पर सेट कर सकते हैं।
यदि आप किसी त्रुटि पर फ़्लश किए जाने वाले बफ़र का उपयोग करते हैं, तो आप मूल्यांकनकर्ता का उपयोग कर सकते हैं:
<evaluator type="log4net.Core.LevelEvaluator">
<threshold value="ERROR"/>
</evaluator>
यदि मूल्यांकनकर्ता की शर्त पूरी की जाती है, तो बफर को फ्लश किया जाएगा।
कॉन्फ़िगर () को कॉल नहीं किया जाता है, या कई बार कॉल किया जाता है
यदि आपको कोई लॉगिंग दिखाई नहीं देती है, तो आप देख सकते हैं कि आपके एप्लिकेशन में Configure() कहा जाता है या नहीं। सबसे आसान तरीका यह है कि इसे अपनी विधानसभा में एक विशेषता के रूप में जोड़ें:
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
फिर आपको अपने विन्यास में कहीं भी log4net.Config.XmlConfigurator.Configure() नहीं जोड़ना log4net.Config.XmlConfigurator.Configure() । या आप अपने किसी स्टार्टअप विधि में log4net.Config.XmlConfigurator.Configure() जोड़ सकते हैं। सुनिश्चित करें कि आप केवल एक बार कॉन्फ़िगरेशन को कॉल करते हैं।
फ़ाइल परिशिष्ट नहीं लिखता है
यदि आपके पास एक फ़ाइल परिशिष्ट है, तो सुनिश्चित करें कि आप उस स्थान पर लिख रहे हैं जहाँ उपयोगकर्ता को फ़ाइलों को बनाने और अपडेट करने की अनुमति है। यदि लॉगिंग विफल हो जाएगी। जब आप आंतरिक डीबगिंग सक्षम हो, तो आप इसे देख सकते हैं।