2010-03-16 16 views
16

हम Winform एप्लिकेशन की घटना और त्रुटि लॉग करने के लिए log4net का उपयोग करते हैं। हमारा ग्राहक चल रहे एप्लिकेशन के दौरान लॉग फ़ाइल की जांच करना चाहता है। लेकिन मुझे पता नहीं चल सकता कि log4net लिखने (प्रतिबद्ध) ऑपरेशन कब और कैसे करता है। और अपने द्वारा एक और लॉगर बनाने के अलावा, ग्राहक की आवश्यकता को पूरा करने के लिए कैसे। कोई मदद? धन्यवाद।लॉग 4नेट फ़ाइल को लॉग या लिखते समय कब करता है?

+0

हम अपने विंडोज़ फॉर्म अनुप्रयोगों में log4net का उपयोग कर रहे हैं और हमें इसके बारे में कोई समस्या नहीं है। ईवेंट और फ़ाइल अपडेट के बीच कुछ विलंबता है, लेकिन हम सेकंड के बारे में बात करते हैं। शायद समस्या किसी अन्य जगह पर है? –

+1

हां, शायद हमारे custormer की समस्या दूसरी स्थिति है। और पीटर ने कहा कि हम इस समस्या को MemoryAppender द्वारा हल करेंगे। सभी को धन्यवाद, खासकर पीटर। आपका जवाब बहुत उपयोगी है। – Jollian

उत्तर

8

आप FileAppender का उपयोग कर रहे हैं, यह appender TextWriterAppender, जो बारी में ImmediateFlush संपत्ति को उजागर करता है इनहेरिट करती है। इस संपत्ति का मूल्य डिफ़ॉल्ट रूप से true है, और प्रत्येक परिशिष्ट संचालन के लिए अंतर्निहित स्ट्रीम पर एपेंडर को Flush() करने के लिए मजबूर करता है।

ग्राहक फ़ाइल को "निगरानी" करने के तरीके के आधार पर, आपके विचार के भीतर से निगरानी को सक्षम करने के लिए एक विचार हो सकता है। यह the MemoryAppender का उपयोग करके और उस एपेंडर से ईवेंट पढ़ने के लिए फ़ाइल में जोड़ने के अलावा किया जा सकता है।

-1

आप एक लॉग फ़ाइल के बारे में बात करते हैं, तो संभव है कि आप FileAppender या व्युत्पन्न कक्षा का उपयोग कर रहे हैं। यह डिफ़ॉल्ट रूप से आउटपुट बफर करेगा। बुफर्ड आउटपुट आपकी आवश्यकता को पूरा करने के लिए बहुत अधिक कुशल है, मैं सुझाव दूंगा कि आप प्रत्येक लिखने के ऑपरेशन के बाद प्रतिबद्धता को मजबूर करने के बजाय इसे देखने से पहले लॉग को फ्लश करने के लिए कुछ तंत्र प्रदान करें।

आपको निम्न रूप कोड के साथ ऐसा कर सकते हैं:

foreach (IAppender appender in LogManager.GetRepository().GetAppenders()) 
{ 
    BufferingAppenderSkeleton b = appender as BufferingAppenderSkeleton; 
    if (b != null) b.Flush(); 
} 
+1

"यह डिफ़ॉल्ट रूप से आउटपुट बफर करेगा।" यह सच नहीं है! FileAppender (अधिक विशेष रूप से इसके बेस क्लास TextWriterAppender) प्रत्येक परिशिष्ट ऑपरेशन के बाद flushes! Http://logging.apache.org/log4net/release/sdk/log4net.Appender.TextWriterAppender.ImmediateFlush.html इसलिए, आपको कुछ भी करने की आवश्यकता नहीं है क्योंकि नवीनतम लॉग प्रविष्टियां हमेशा फ़ाइल में तुरंत लिखी जाएंगी , ताकि आपका ग्राहक बस फ़ाइल खोल सके। – gehho

+1

@gehho सही है। FileAppender बफर नहीं करता है। बफरिंग करने वाले अंतर्निहित परिशिष्ट एडोनेट-, बफरिंग फॉरवर्डिंग-, रिमोटिंग- और SmtpXXX परिशिष्ट हैं। –

1

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

इस वजह से आपको यह सुनिश्चित करने की आवश्यकता है कि आपकी कॉन्फ़िगरेशन सही प्रमाण-पत्रों के साथ आती है, SharePoint में यह एक उच्च सुरक्षा संदर्भ में होगा। पूरी तरह से संबंधित नहीं है, लेकिन यह एक मुद्दा हो सकता है जिसे आप पार करते हैं।

0

this एसओ पोस्ट प्रोग्रामेटिक रूप से log4net लॉग को कैसे फ़्लश करें। जो का जवाब थोड़ा गलत है, वस्तुतः एक ही कोड है और इसलिए सभी buffered परिशिष्टों को फ्लश करने के लिए संभवतः काम करेगा।

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