मुझे हाल ही में विंडोज़ सेवा की तैनाती के दौरान एक समस्या थी। चार कंप्यूटरों ने कोई समस्या नहीं पैदा की, लेकिन पांचवें स्थान पर सेवा शुरू करने का कोई भी प्रयास अपवाद के कारण विफल रहा। अपवाद स्टैक ट्रेस ईवेंट लॉग करने के लिए लिखा है, तो मैं हालांकि यह कारण की पहचान करने के लिए आसान होना चाहिए:इवेंट लॉग प्रविष्टियों को लिखने का सबसे अच्छा तरीका क्या है?
protected override void OnStart(string[] args)
{
EventLog.WriteEntry("Starting service", EventLogEntryType.Information);
try
{
//...
base.OnStart(args);
}
catch (Exception ex)
{
EventLog.WriteEntry("Service can not start. Stack trace:" + ex.StackTrace, EventLogEntryType.Error);
Stop();
return;
}
EventLog.WriteEntry("Service started", EventLogEntryType.Information);
}
लेकिन अफसोस, कोई जानकारी नहीं कभी लॉग में लिखा गया था। आखिर में मैंने इसे पहली लॉग प्रविष्टि में लिखा था। इसने अपवाद फेंक दिया क्योंकि एप्लिकेशन इवेंट लॉग हालिया प्रविष्टियों से भरा था, और केवल 7 दिनों से अधिक प्रविष्टियों को ओवरराइट करने के लिए कॉन्फ़िगर किया गया था।
इवेंट लॉग में लिखने के सर्वोत्तम अभ्यास क्या हैं, इस पर विचार करते हुए कि मैं एप्लिकेशन इवेंट लॉग की कॉन्फ़िगरेशन नहीं बदल सकता?
क्या मुझे हमेशा प्रयास करने के लिए EventLog.WriteEntry
डालना चाहिए, यदि हां, तो मुझे अपवाद को कैसे संभालना चाहिए (इसे ईवेंट लॉग में लिखना शायद एक बुरा विचार है), क्या मुझे अपने OnStart
विधि में ईवेंट लॉग स्थिति की जांच करनी चाहिए, या आपके पास कोई बेहतर सुझाव है?
इवेंट लॉग में लिखना "आपके लॉगिंग कोड को स्वयं लिखना" नहीं है। – MusiGenesis
@MusiGenesis: कृपया समझाएं। लॉगिंग विशिष्ट अपवाद हैंडलिंग लिखने के लिए मुझे कोड लिखना है जो उदाहरण के लिए Log4Net या NLog द्वारा पहले से ही बेहतर किया जा चुका है। मुझे एक और लॉगिंग फ्रेमवर्क लिखने का कोई कारण नहीं दिखता है। – Mendelt
सिस्टम। डायग्नोस्टिक्स.इवेंटलॉग विंडोज इवेंट लॉग में लिखने के लिए एक अंतर्निहित .NET क्लास है, कुछ ऐसा नहीं जो उन्होंने स्वयं लिखा है। – MusiGenesis