2011-11-16 16 views
8

को लक्षित करने के लिए उन्हें फ़्लश करता है मैं NLog MailTarget के माध्यम से लॉग इन करने का प्रयास कर रहा हूं। यह ठीक काम करता है, लेकिन मैं एक पूर्वनिर्धारित कोडपॉइंट तक लॉग संदेशों को बफर करने के लिए BufferedTargetWrapper के साथ मेलटाइटल को लपेटना चाहता था, जहां मैं मैन्युअल रूप से बफर को फ्लश करना चाहता हूं और प्रीवीसली buffered लॉग संदेशों को एक मेल द्वारा भेजना चाहता हूं (जैसे परिभाषित मेल लक्ष्य)।एनएलओजी में लॉगिंग लॉग संदेश और मैन्युअल रूप से

यदि मैं FlushTimeout या के BufferSize को परिभाषित करता हूं तो सबकुछ अभी भी ठीक जैसा काम करता है। लेकिन यदि फ्लशटाइमआउट और बफरसाइज सेट नहीं है, तो मैं इसे काम नहीं कर सकता।

तरह अतः Force BufferingTargetWrapper to empty पर इस प्रश्न का उत्तर मैं उस तरह नहीं कुछ है:

LogManager.Configuration.AllTargets.Where(t => t != null && t is BufferingTargetWrapper).ToList(). 
      ForEach(b => ((BufferingTargetWrapper)b).Flush(null)); 

लेकिन दस्तावेज और इस जवाब मेरे NLog संस्करण (2.0.0.2000) के विपरीत है। पैरामीटर के बिना कोई फ्लश विधि नहीं है, केवल असीमित लक्ष्य के लिए फ्लश विधि है।

क्या सभी लॉग इन संदेशों को लपेटा हुआ लक्ष्य (इसे मेल द्वारा भेजने के लिए) को फ़्लश करने के लिए BufferingTargetWrapper को मजबूर करने का कोई तरीका है?

उत्तर

14

दस्तावेज़ीकरण के अनुसार आपके दृष्टिकोण को काम नहीं करना चाहिए, लेकिन यह ठीक है। बस फ्लश विधि को एक खाली लैम्ब्डा अभिव्यक्ति दें:

LogManager.Configuration.AllTargets 
    .OfType<BufferingTargetWrapper>() 
    .ToList() 
    .ForEach(b => b.Flush(e => 
     { 
      //do nothing here 
     })); 
+0

अच्छा काम करता है! धन्यवाद! – dasheddot

+0

यह बहुत अच्छा काम करता है! –

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