2010-04-19 12 views
12

मैं एक नई घटना स्रोत बनाने रहा हूँ और नीचे दिए गए कोड का उपयोग कर संदेश लॉग इन करने:विंडोज इवेंट लॉग - एक इवेंट स्रोत कैसे पंजीकृत करें?

static void Main(string[] args) 
    { 
     if (!EventLog.SourceExists("My Log")) 
     { 
      EventLog.CreateEventSource("My Application", "My Log"); 
      Console.WriteLine("Created new log \"My Log\""); 
     } 

     EventLog myLog = new EventLog("My Log"); 
     myLog.Source = "My Application"; 
     myLog.WriteEntry("Could not connect", EventLogEntryType.Error, 1001, 1); 
    } 

नाम "मेरा लॉग" के साथ एक कस्टम ईवेंट लॉग बनाई गई है (उम्मीद के रूप में), लेकिन संदेश नीचे दिए गए प्रवेश कर रहा है " आवेदन "नोड। मैं क्या गलत कर रहा हूं?

उत्तर

16

वहाँ MSDN में निम्नलिखित टिप्पणी है:

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

क्या कोड को आजमाने के दौरान यह संभव है कि आपने एप्लिकेशन लॉग में लिखने की कोशिश की हो और अब आपको उस लिंक को "अनैप" करने के लिए रीबूट करने की आवश्यकता है?

+0

मेरा पीसी रिबूट करने के बाद, आवेदन पड़ता कि उम्मीद है। –

+0

यहां तक ​​कि मेरे प्रोग्रामेटिक रूप से स्रोतों को हटाने, लॉग और सामान के साथ मुझे अभी भी रीबूट करने की आवश्यकता है :) – PJUK

+0

मेरी इच्छा है कि मैं इसे 10 बार ऊपर उठा सकूं ... मैंने यह जानने का प्रयास किया है कि यह मेरे स्रोत को एप्लिकेशन लॉग में क्यों लिख रहा है समय मैंने लापरवाही की चीज़ स्थापित की! – alexD

8

आपको लगता है कि वहां कहीं चीजें मिश्रित होती हैं।

आपके पास एक स्रोत है (जो आपका आवेदन है) और वह स्रोत लॉग से जुड़ा हुआ है, यह तब किया जाता है जब आप अपना स्रोत बनाते हैं, आपने इन्हें अपने कोड की शुरुआत में थोड़ा सा मिश्रित किया है, इसमें होना चाहिए तथ्य

if (!EventLog.SourceExists("My Application")) 

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

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

मैंने इसे अपने सेवा.cs कन्स्ट्रक्टर में डालने का प्रयास किया और यह स्टार्टअप पर त्रुटि 1053 के साथ दुर्घटनाग्रस्त हो गया। – obl

+0

आपको रजिस्ट्री में इवेंट लॉग फ़ोल्डर में लेखन पहुंच की आवश्यकता है, अन्यथा, इसे अभी भी काम करना चाहिए, 1053 का मतलब है कि मुझे कुछ भी नहीं है – PJUK

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