2010-06-08 12 views
12

मैंने स्थानीय कंप्यूटर पर लॉग देखने के लिए System.Diagnostics.EventLog का उपयोग किया है। हालांकि, मैं एक सहेजा गया ईवेंट लॉग संग्रह (.evt या .evtx) खोलना चाहता हूं और सहेजी गई फ़ाइल में मौजूद लॉग को देखना चाहता हूं। मुझे बस फाइल में लॉग के साथ जुड़े टाइमस्टैम्प, संदेश, स्रोत इत्यादि देखने की जरूरत है। क्या यह सी # में किया जा सकता है?.NET में सहेजे गए ईवेंट लॉग संग्रह को कैसे खोलें?

उत्तर

2

Microsoft से LogParser उपकरण का प्रयास करें। यह एसक्यूएल जैसी भाषा का चयन कर किसी भी लॉग प्रारूप के लॉग से किसी भी डेटा को प्राप्त कर सकता है। इसका उपयोग किसी भी .NET अनुप्रयोग से भी किया जा सकता है। सीएसवी लॉग के उदाहरण पार्स (मेरा मानना ​​है कि आप छोटे संशोधनों के साथ EVT फ़ाइलों के लिए इस कोड का उपयोग कर सकते हैं): आपका इरादा बचाया लॉग पढ़ने के लिए है

 public IList<LogRow> GetLog() 
     { 
      return Load("SELECT *, OUT_ROW_NUMBER() FROM logfile*.log WHERE Field2='Performance' ORDER BY Field1 ASC"); 
     } 

    private static IList<LogRow> Load(string sql) 
    { 
     IEnumerable<string[]> log = ParseLog(sql); 

     return Convert(log); 
    } 

    private static IList<LogRow> Convert(IEnumerable<string[]> log) 
    { 
     return log.Select(logRecord => new LogRow 
              { 
               TimeStamp = logRecord[2], 
               Category = logRecord[3], 
               Machine = logRecord[4], 
               ThreadId = logRecord[5], 
               ProcessId = logRecord[6], 
               ProcessName = logRecord[7], 
               DomainName = logRecord[8], 
               Message = logRecord[9], 
               Number = logRecord[10] 
              }).ToList(); 
    } 


     private static IEnumerable<string[]> ParseLog(string query) 
     { 
      var records = new LogQueryClassClass().Execute(
       query, 
       new COMCSVInputContextClass { headerRow = false, iTsFormat = "yyyy-MM-dd HH:mm:ss.fff" }); 
      var entries = new List<string[]>(); 

      while (!records.atEnd()) 
      { 
       entries.Add(records.getRecord().toNativeString("CSVseparator").Split(
           new[] { "CSVseparator" }, 
           StringSplitOptions.None)); 
       records.moveNext(); 
      } 

      records.close(); 
      return entries; 
     } 
0

है, हम इसे EventLogReader उपयोग कर सकते हैं। यह मूल रूप से दो पैरामीटर लेता है - फ़ाइल नाम (फ़ाइल पथ में), और पथ पैरामीटर निर्दिष्ट करने वाला दूसरा पैरामीटर। आपके संदर्भ के लिए, मान लीजिए कि आप किसी सहेजे गए .evtx फ़ाइल है - temp.evtx, आप में के रूप में यह पढ़ सकते हैं:

new EventLogReader(filepath, PathType.Filepath); 

यह आपको एक ईवेंट लॉग पाठक, जो घटनाओं को पढ़ने के लिए इस्तेमाल किया जा सकता देता है। और और भी, यदि आप इससे सामग्री को पढ़ना चाहते हैं, तो हम उन गुणों का उपयोग कर सकते हैं जो मूल रूप से स्ट्रिंग की एक सूची है। इसे पढ़ सकते हैं, इसे पार्स कर सकते हैं, और आपको जो भी जानकारी चाहिए उसे प्राप्त कर सकते हैं।

मैं मानता हूं कि हमारे पास EventLogEntry का उपयोग करने के बारे में सभी विवरण सीधे प्राप्त करने का प्रावधान नहीं है। कभी भी कम नहीं, हमें घटना रिकॉर्ड का उपयोग करने की आवश्यकता के लिए कुछ पार्सिंग करने की आवश्यकता है।

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