2009-12-14 11 views
23

नहीं बना रहा है मैं इस तरह कुछ कोड है: जब तक कि मैं MSDN पढ़ कुछ याद कर रहा हूँ, अबEventLog.CreateEventSource एक कस्टम लॉग

EventLog.CreateEventSource("myApp", "myAppLog"); 
EventLog.WriteEntry("myApp", "Test log message", EventLogEntryType.Error); 

, इस कारण चाहिए एक नया लॉग 'myAppLog' बनाया जाना ईवेंट व्यूअर में, और स्रोत नाम 'myApp' के साथ उस नए लॉग में एक प्रविष्टि जोड़ा जाना चाहिए। लेकिन, मुझे नया लॉग बनने के लिए नहीं मिल रहा है। यह हमेशा एप्लिकेशन लॉग में एक त्रुटि लॉग संदेश लिखता है, स्रोत 'myApp' - 'myAppLog' के साथ कहीं भी नहीं देखा जाता है। मैं क्या गलत कर रहा हूं? मैं एक प्रशासक के रूप में लॉग इन हूँ।

उत्तर

38

क्या यह संभव है कि आपने मानक एप्लिकेशन लॉग पर लिखते समय पहले से ही "myApp" स्रोत का उपयोग किया हो? इसलिए MSDN के अनुसार हैं:

एक स्रोत पहले से ही को एक लॉग मैप किया गया है और आप एक नया लॉग करने के लिए इसे पुन: मैप, आप परिवर्तनों को प्रभावी करने के लिए कंप्यूटर को पुनरारंभ करना होगा।

http://msdn.microsoft.com/en-us/library/2awhba7a.aspx

+1

यह मूल रूप से मेरी समस्या थी। विंडोज इवेंट लॉग थोड़ा सा खराब है कि यह ठीक से काम नहीं कर सकता है अगर आप पहली बार जब आप मशीन को पुनरारंभ नहीं करते हैं तब तक आप एक नए कस्टम लॉग पर लिख रहे हैं। मुझे यह लॉग बनाने में मिला, लेकिन जब तक मैंने मशीन को पुनरारंभ नहीं किया, तब तक यह उस नए कस्टम लॉग और इवेंट व्यूअर में एप्लिकेशन लॉग दोनों को संदेश लिख रहा था। उसके बाद, मेरे नए कस्टम लॉग में नए संदेश अभी लॉग हो गए हैं। धन्यवाद! – Jez

+0

डिबगिंग के कुछ समय बाद मैंने पुनरारंभ किया। वह काम किया! – jonas

+0

इवेंट व्यूअर को पुनरारंभ करने से Win8 पर मेरे मामले में मदद मिली। – Legends

0

क्या आपने अपना EventLog पर स्रोत सेट किया था?

MSDN Article से।

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

+0

यह केवल तब लागू होता है जब आप किसी ईवेंट लॉग का उदाहरण बना रहे हों। चूंकि मैं स्थैतिक WriteEntry विधि का उपयोग कर रहा हूं, स्रोत को पहले स्ट्रिंग तर्क के रूप में पारित किया गया है। – Jez

4

आप अपने इवेंट लॉग पर स्रोत प्रॉपर्टी सेट करना भूल सकते हैं।

वह कुछ इस तरह दिखना चाहिए:

 if(!EventLog.SourceExists("MySource")) 
     { 
      EventLog.CreateEventSource("MySource", "MyNewLog"); 
     } 

     EventLog myLog = new EventLog(); 
     myLog.Source = "MySource"; 

     myLog.WriteEntry("Writing to event log."); 

यहाँ संदर्भ के लिए MSDN article है।

+0

एक और जवाब के रूप में एक ही गलती। :-) मैं EventLog का एक उदाहरण उपयोग नहीं कर रहा हूं; मैं स्थैतिक WriteEntry विधि का उपयोग कर रहा हूं, इसलिए यह लागू नहीं होता है। – Jez

+1

@ जेज़ यदि आप फ्लाई पर इवेंटसोर्स बना रहे हैं तो आपको यह ध्यान रखना होगा कि इवेंटसोर्स बनाने में विलंबता है, इसलिए यह तुरंत उपलब्ध नहीं होगा। यदि आप निष्पादित करते हैं कि आप दो बार प्रोग्राम हैं, तो क्या यह सही स्रोत पर लिखना शुरू कर देता है? – Joseph

5

(पेज नीचे आधा रास्ता के बारे में) मैं तो बस मुझे इस की मदद करने के लिए एक छोटे से कोड लिखा है। स्रोत जो किसी अन्य लॉग मुद्दे में पंजीकृत है, जिसका मैंने सामना किया है और मैन्युअल रूप से लॉग से स्रोतों को हटाना नहीं चाहता है। मैंने जो करने का फैसला किया था, यह जांचना था कि स्रोत मौजूद है या नहीं, अगर यह जांचता है कि यह सही लॉग से जुड़ा हुआ है, अगर यह स्रोत को हटा नहीं रहा है, तो अब यह अस्तित्व में नहीं है या एफ ने कभी भी लॉग ब्रांड नहीं बनाया है ।

protected const string EventLogName = "MyLog"; 

private static bool CheckSourceExists(string source) { 
    if (EventLog.SourceExists(source)) { 
    EventLog evLog = new EventLog {Source = source}; 
    if (evLog.Log != EventLogName) { 
     EventLog.DeleteEventSource(source); 
    } 
    } 

    if (!EventLog.SourceExists(source)) { 
    EventLog.CreateEventSource(source, EventLogName); 
    EventLog.WriteEntry(source, String.Format("Event Log Created '{0}'/'{1}'", EventLogName, source), EventLogEntryType.Information); 
    } 

    return EventLog.SourceExists(source); 
} 

public static void WriteEventToMyLog(string source, string text, EventLogEntryType type) {  
    if (CheckSourceExists(source)) {   
     EventLog.WriteEntry(source, text, type);   
    } 
} 

उम्मीद है कि यह मदद करता है :)

+0

यह एक छोटा सा चेकसोर्सइक्सिस्ट भारी है ... अगर वह हर समय ऐसा कर रहा था तो एक दुःस्वप्न होगा। निष्पादन की शुरुआत में इसे एक बार क्यों न जांचें और उस पर छोड़ दें? – CokoBWare

+0

हां, आप वहीं हैं, मुझे लगता है कि मैंने इसे साइट पर उपयोग करने के बाद एक बार कुछ और चलाने के लिए फिर से फैक्टरिंग समाप्त कर दिया। स्रोत बनाने के लिए व्यवस्थापक अनुमतियों (या विशिष्ट ईवेंट लॉग अनुमतियों) की आवश्यकता भी एक प्रेरक था। – PJUK

0

आप अन्य उत्तर में सभी सुझावों की जाँच कर ली है, तो निम्न

से MSDN

ऑपरेटिंग सिस्टम भंडार इवेंट लॉग फ़ाइलों के रूप में पढ़ा । जब आप कोई नया इवेंट लॉग बनाने के लिए EventLogInstaller या CreateEventSource का उपयोग करते हैं, तो संबंधित फ़ाइल निर्दिष्ट कंप्यूटर पर% SystemRoot% \ System32 \ Config निर्देशिका में संग्रहीत होती है। फ़ाइल नाम ".evt" फ़ाइल नाम एक्सटेंशन के साथ लॉग प्रॉपर्टी के पहले 8 वर्णों को जोड़कर सेट किया गया है।

सुनिश्चित करें कि पहले 8 वर्ण अद्वितीय हैं।

0

असल में, सबसे सरल समाधान है कि आपको अपना विजुअल स्टूडियो बंद करना होगा और व्यवस्थापक मोड के रूप में चलाया जाना चाहिए। फिर, आप इस त्रुटि को हल करने में सक्षम होंगे

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