2010-06-08 11 views
12

Użyłem logu System.Diagnostics.EventLog, aby wyświetlić dzienniki na lokalnym komputerze. Chciałbym jednak otworzyć zapisane archiwum dziennika zdarzeń (.evt lub .evtx) i wyświetlić dzienniki zawarte w zapisanym pliku. Potrzebuję tylko wyświetlić znaczniki czasu, wiadomości, źródła itp. Powiązane z dziennikami w pliku. Czy można to zrobić w języku C#?Jak otworzyć zapisane archiwum dzienników zdarzeń w .NET?

Odpowiedz

2

Spróbuj LogParser narzędzie firmy Microsoft. Może pobierać dowolne dane z dzienników dowolnego formatu dziennika przy użyciu języka SQL, np. Wybierając język. Można go również używać z dowolnej aplikacji .NET. Przykład analizowania dzienników CSV (Wierzę, że można użyć tego kodu do plików EVT z małymi modyfikacjami):

 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

Jeśli twoim zamiarem jest, aby odczytać zapisane dzienniki, możemy to zrobić za pomocą EventLogReader. Zasadniczo przyjmuje dwa parametry - nazwę pliku (jak w ścieżce pliku) i drugi parametr określający typ ścieżki. W celach informacyjnych, że masz zapisany plik .evtx - temp.evtx, można go przeczytać na przykład:

new EventLogReader(filepath, PathType.Filepath); 

Daje to czytelnikowi dziennika zdarzeń, który może być wykorzystany do odczytu zdarzeń. Co więcej, jeśli chcesz odczytać zawartość z niego, możemy użyć właściwości, która jest w zasadzie listą ciągów. Potrafi ją przeczytać, przeanalizować i uzyskać wszelkie potrzebne informacje.

Zgadzam się, że nie mamy przepisu, aby bezpośrednio uzyskać wszystkie szczegóły, tak jak to, co otrzymujemy za pomocą EventLogEntry. Niemniej jednak, po prostu musimy przeprowadzić pewne analizy, aby uzyskać to, czego potrzebujemy, wykorzystując rekord zdarzeń.

Powiązane problemy