2011-10-31 9 views
8

जब मैं निम्नलिखित कोड का उपयोग आवेदन ईवेंट लॉग में लिखने के लिए, सब कुछ ठीक काम करता है:सी # में इवेंट लॉग में लिखना - क्या मुझे एप्लिकेशन लॉग पर लिखते समय EventLog.CreateEventSource का उपयोग करने की आवश्यकता है?

EventLog log = new EventLog(); 
log.Source = "Application"; 
log.WriteEntry("test message", EventLogEntryType.Error); 

जब मैं कोड MSDN और सभी अन्य ब्लॉग से है कि का उपयोग करें, मैं (मैं क्योंकि अनुमान लगा रहा हूँ सुरक्षा त्रुटि मिलती है CreateEventSource इसे उठाता है)।

string sSource = "MyWebService"; 
string sLog = "myApplication"; 
string sMsg = errorMessage; 

if (!EventLog.SourceExists(sSource)) 
    EventLog.CreateEventSource(sSource, sLog); 

EventLog.WriteEntry(sSource, sMsg, EventLogEntryType.Error); 

तो, क्या मुझे यह जांचने की ज़रूरत है कि स्रोत मौजूद है या नहीं, अगर मुझे आवश्यकता है तो डिफ़ॉल्ट रूप से एप्लिकेशन लॉग पर लिखना है?

EventViewer को लिखने का सही तरीका क्या है?

उत्तर

7

CreateEventSource विधि इवेंट लॉग में एक नया स्रोत बनाते हैं, इससे आपको सामान्य Application समूह में लिखने के बजाय एप्लिकेशन के अपने समूह में अपने एप्लिकेशन का लॉग लिखने की अनुमति मिलती है।

शायद आपको कोई त्रुटि मिलती है क्योंकि आप जिस उपयोगकर्ता को इवेंट स्रोत बनाने के लिए उपयोग कर रहे हैं उसे बनाने की अनुमति नहीं है, तो यदि आप Vista/7 OS के अंतर्गत हैं तो अपने प्रोग्राम को व्यवस्थापक के रूप में चलाने का प्रयास करें।

ईवेंट व्यूअर में लॉग इन करने का सही तरीका आपकी आवश्यकताओं पर निर्भर करता है, यदि आपका एप्लिकेशन बहुत सारे लॉगिंग संदेश उत्पन्न करता है और आप इस लॉग को एक एप्लिकेशन विशिष्ट कंटेनर में समूहित करना चाहते हैं, तो शायद एक एप्लिकेशन विशिष्ट लॉग बनाना बेहतर है घटना स्रोत और इसमें लॉग लिखें, इसके बजाय यदि आपका एप्लिकेशन कुछ लॉग संदेश उत्पन्न करता है और उन्हें समूहबद्ध करने की कोई आवश्यकता नहीं है तो आप जेनेरिक Application लॉग इवेंट स्रोत का उपयोग कर सकते हैं ...

+1

बढ़िया, धन्यवाद! मुझे बस पुष्टि करने की आवश्यकता है। मुझे एक अलग स्रोत/लॉग बनाने की आवश्यकता नहीं है। मैं वास्तव में एप्लिकेशन लॉग को लिखना चाहता हूं। – sarsnake

+2

एक और सवाल: जब मैं जेनेरिक एप्लिकेशन स्रोत पर लिखता हूं, तो मुझे इवेंट व्यूअर में इसे देखते समय निम्न संदेश मिलता है: "इवेंट (0) का विवरण स्रोत (एप्लिकेशन) नहीं मिला है। स्थानीय कंप्यूटर नहीं हो सकता है रिमोट कंप्यूटर से संदेश प्रदर्शित करने के लिए आवश्यक रजिस्ट्री जानकारी या संदेश DLL फ़ाइलें हैं ".... तो मेरा कस्टम संदेश प्रदर्शित होता है। मैं सोच रहा था कि स्रोत को सेट करने के लिए यह लंबा डिफ़ॉल्ट संदेश w/o प्रदर्शित करना संभव नहीं है। – sarsnake

+0

क्योंकि आपके मॉनिटरिंग कंप्यूटर में त्रुटि संदेश के संदर्भ नहीं हैं, दूरस्थ मशीन इवेंट लॉग को टेक्स्टबेस सीएसवी फ़ाइल में निर्यात करें और आपको रिमोट मशीन से सभी जानकारी मिलती है (अन्य लोगों द्वारा इंस्टॉल किए गए सभी ऐप्स की त्रुटियों को शामिल करना)। – user3800527

2

मैं सुझाव है कि आप log4net कोशिश, मामले में आप के रूप में अच्छी विभिन्न स्रोतों के लिए लिखना चाहते हैं (SMTP, फ़ाइल, आदि)

http://logging.apache.org/log4net/release/config-examples.html#eventlogappender

वेब एप्लिकेशन के लिए:

सामान्य उपयोग:

WinForms/खिड़कियों सेवा के लिए इसी तरह समाधान।

+2

धन्यवाद, लेकिन यह पूछे गए प्रश्न का उत्तर नहीं देता है। – sarsnake

-1

आपको बनाने की आवश्यकता नहीं है एक घटना स्रोत। भाषा-स्वतंत्र या ऐसी प्रतिस्थापन वाली घटनाएं उत्पन्न करते समय यह एक बड़ा फायदा हो सकता है, लेकिन कम से कम .NET प्रोग्राम के लिए यह वैकल्पिक है (बीसीएल एक डिफ़ॉल्ट घटना स्रोत प्रदान करता है)।

+0

जब आप लॉग खाली होते हैं तो आपको "स्रोत प्रॉपर्टी को इवेंट लॉग पर लिखने से पहले सेट नहीं किया गया था" त्रुटि मिलती है, इसलिए नहीं, यह वैकल्पिक नहीं है। –

2

आपको ईवेंट स्रोत बनाने के लिए व्यवस्थापकीय अधिकारों की आवश्यकता है। पहले में आप एक कस्टम स्रोत का उपयोग नहीं कर रहे हैं।

1

एक सीधा WriteEntry डिफ़ॉल्ट एप्लिकेशन स्रोत पर जाएगा। SourceExists और CreateEventSource यह है कि यदि आप अपना स्वयं का कस्टम स्रोत बनाना चाहते हैं जो इवेंट व्यूअर में किसी भी लॉग प्रविष्टियों को ढूंढना आसान होगा।

और हाँ, आपको ग्राहक घटना स्रोत बनाने के अधिकार होने चाहिए, जैसा कि अन्य ने उल्लेख किया है।

0

आपको अपने आवेदन को चलाने के लिए व्यवस्थापक अधिकारों की आवश्यकता है।

या तो आप अपने exe फ़ाइल पर द्वारा अपने आवेदन अपने आवेदन और राइट क्लिक की डिबग फ़ोल्डर में जा रहे हैं चलाने के लिए और

या

आप व्यवस्थापक

के रूप में दृश्य स्टूडियो चलाने व्यवस्थापक के रूप में चला सकते हैं