2010-01-12 4 views
51

में बफर को प्रोग्राम करने के लिए वैसे भी है, मैं AdoNetAppender के साथ log4net का उपयोग कर रहा हूं। ऐसा लगता है कि AdoNetAppender के पास Flush method है। क्या वैसे भी मैं इसे अपने कोड से बुला सकता हूं?क्या लॉगऑनेट

मैं डेटाबेस लॉग में सभी प्रविष्टियों को देखने के लिए एक व्यवस्थापक पृष्ठ बनाने की कोशिश कर रहा हूं, और मैं bufferSize = 100 (या अधिक) के साथ log4net सेटअप करना चाहता हूं, तो मैं चाहता हूं कि व्यवस्थापक एक क्लिक करने में सक्षम हो डेटाबेस पेज पर buffered लॉग प्रविष्टियों को लिखने के लिए log4net को बल देने के लिए व्यवस्थापक पृष्ठ पर बटन (लॉग 4नेट को बंद किए बिना)।

क्या यह संभव है?

उत्तर

79

मान लिया जाये कि आप बॉक्स से बाहर log4net का उपयोग कर रहे हैं, तो आप नीचे & अपना रास्ता खुदाई कर सकते हैं इस तरह appender फ्लश:

public void FlushBuffers() 
{ 
    ILog log = LogManager.GetLogger("whatever"); 
    var logger = log.Logger as Logger; 
    if (logger != null) 
    { 
     foreach (IAppender appender in logger.Appenders) 
     { 
      var buffered = appender as BufferingAppenderSkeleton; 
      if (buffered != null) 
      { 
       buffered.Flush(); 
      } 
     } 
    } 
} 

संपादित: मैं इस धारणा के तहत लिखा है कि इसके बाद के संस्करण आप परिशिष्ट को एक विशिष्ट ILog (संभवतः एक बुरा धारणा है कि मैंने प्रश्न को फिर से पढ़ा है) के लिए फ्लश करना चाहता था, लेकिन जैसा कि स्टीफन नीचे एक टिप्पणी में इंगित करता है, आप कोड को थोड़ा सा सरल बना सकते हैं यदि आप सभी परिशिष्टों को फ्लश करना चाहते हैं निम्न भंडार निम्नानुसार है:

public void FlushBuffers() 
{ 
    ILoggerRepository rep = LogManager.GetRepository(); 
    foreach (IAppender appender in rep.GetAppenders()) 
    { 
     var buffered = appender as BufferingAppenderSkeleton; 
     if (buffered != null) 
     { 
      buffered.Flush(); 
     } 
    } 
} 
+4

मुझे लगता है कि log4net.LogManager.GetRepository()। GetAppenders(); आपको सभी परिशिष्ट मिलेंगे इससे कोई फर्क नहीं पड़ता कि वे किस लॉगर से जुड़े हुए हैं ... –

+0

@Stefan: अच्छी तरह से देखा गया। मैंने अपना जवाब अपडेट कर लिया है। धन्यवाद। – Alconja

+5

ILoggerRepository भंडार = LogManager.GetRepository(); IENumerable appenders = repository.GetAppenders()। ओफ़टाइप (); foreach (परिशिष्ट में var appender) appender.Flush(); –