2008-09-24 21 views
7

मैं उत्पादन वातावरण में, सी # प्रोजेक्ट में लॉग 4नेट का उपयोग कर रहा हूं, मैं सभी लॉगिंग को अक्षम करना चाहता हूं, लेकिन जब कुछ घातक त्रुटि होती है तो उसे पिछले 512 संदेशों को लॉग इन करना चाहिए फ़ाइल। मैंने इसे सफलतापूर्वक कॉन्फ़िगर किया है, और यह ठीक काम कर रहा है। जब कुछ घातक त्रुटि होती है तो यह संदेशों को किसी फ़ाइल में लॉग करता है।लॉग 4नेट/सी # - डिफ़ॉल्ट लॉगिंग अक्षम करें

लेकिन जब मैं इसे विजुअल स्टूडियो से चलाता हूं, तो मैं देख सकता हूं कि सभी लॉग संदेश आउटपुट विंडो पर लिखे गए हैं, भले ही यह घातक है या नहीं। (जब मैं विंडोज एक्सप्लोरर से चलाता हूं तो मैं इन संदेशों को नहीं देख सकता - मेरा एप्लिकेशन एक WinForm exe है और आउटपुट देखने के लिए कोई कंसोल विंडो नहीं है)

क्या इस लॉगिंग को अक्षम करने का कोई तरीका है? मुझे केवल फाइल में अपने लॉग की ज़रूरत है, वह भी जब कुछ घातक त्रुटि होती है।

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <log4net debug="false"> 

     <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
      <file value="log.txt" /> 
      <appendToFile value="true" /> 
      <rollingStyle value="Size" /> 
      <maxSizeRollBackups value="10" /> 
      <maximumFileSize value="1MB" /> 
      <staticLogFileName value="true" /> 
      <layout type="log4net.Layout.PatternLayout"> 
       <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
      </layout> 
     </appender> 

     <appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender" > 
      <bufferSize value="512" /> 
      <lossy value="true" /> 
      <evaluator type="log4net.Core.LevelEvaluator"> 
       <threshold value="FATAL"/> 
      </evaluator> 
      <appender-ref ref="RollingFileAppender" /> 
     </appender> 

     <root> 
      <level value="DEBUG" /> 
      <appender-ref ref="BufferingForwardingAppender" />   
     </root> 
    </log4net> 
</configuration> 

और इस तरह मैं इसे विंडोज फॉर्म के स्थिर प्रारंभकर्ता में कॉन्फ़िगर करता हूं।

static Window1() 
    { 
     Stream vStream = typeof(Window1).Assembly.GetManifestResourceStream("TestLogNet.log4net.config"); 
     XmlConfigurator.Configure(vStream); 
     BasicConfigurator.Configure(); 
    } 

और मैं लकड़हारा वस्तु WinForm के निर्माता में प्रारंभ हो

logger = LogManager.GetLogger(typeof(Window1)); 

[भाषा - सी #, .नेट फ्रेमवर्क - 3.5, विजुअल स्टूडियो 2008, log4net 1.2.10, प्रोजेक्ट टाइप - विनफॉर्म]

+0

क्या इससे कोई फर्क नहीं पड़ता कि सबकुछ कंसोल पर आउटपुट हो रहा है? निश्चित रूप से जब आपके Winforms ऐप में कोई कंसोल नहीं है, तो यह सिर्फ लॉगिंग कर रहा है जैसा आप चाहते हैं? –

+2

यह प्रदर्शन के लिए महत्वपूर्ण है, क्योंकि सभी कंसोल कॉल सिंक्रनाइज़ होते हैं। अगर आपके पास लॉगिंग करने वाले पृष्ठभूमि धागे का एक गुच्छा है तो वे बुरी तरह पीड़ित होंगे। –

+0

+1 समस्या के बारे में पूरी जानकारी के लिए +1 (बहुत सारे प्रश्न हैं जिन्हें "मदद, यह काम नहीं कर रहा है" को फिर से शुरू किया जा सकता है) – alexandrul

उत्तर

7

BasicConfigurator.Configure() लाइन हटाएं। यही वह लाइन करता है - कंसोल पर इंगित एक ConsoleAppender जोड़ता है। आउट।

+0

धन्यवाद जोनाथन, यह काम किया। – Crazy88

0

क्या आप अभी भी विजुअल स्टूडियो में संदेश देखते हैं यदि एप्लिकेशन रिलीज़ मोड में संकलित किया गया है? यह संभव है कि log4net त्रुटियों को दिखाने के लिए Debug.Write का उपयोग करता है। यदि ऐसा है तो उन संदेशों को रिलीज मोड में नहीं दिखना चाहिए।

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