2010-06-08 10 views
12

Ho utilizzato System.Diagnostics.EventLog per visualizzare i registri sul computer locale. Tuttavia, vorrei aprire un archivio del registro eventi salvato (.evt o .evtx) e visualizzare i registri contenuti nel file salvato. Devo solo visualizzare timestamp, messaggi, fonti, ecc. Associati ai log nel file. Questo può essere fatto in C#?Come aprire l'archivio del registro eventi salvato in .NET?

risposta

2

Prova LogParser strumento da Microsoft. Può recuperare tutti i dati dai log di qualsiasi formato di registro utilizzando la lingua di selezione simile a SQL. Può anche essere utilizzato da qualsiasi applicazione .NET. L'esempio di analisi dei log CSV (credo che è possibile utilizzare questo codice per file EVT con piccole modifiche):

 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

Se la vostra intenzione è quella di leggere i log salvati, siamo in grado di farlo utilizzando EventLogReader. Prende fondamentalmente due parametri: nomefile (come nel percorso del file) e secondo parametro che specifica il tipo di percorso. Per il vostro riferimento, che si dispone di un file salvato evtx - temp.evtx, si può leggere come in:

new EventLogReader(filepath, PathType.Filepath); 

Questo vi dà un lettore di log degli eventi, che può essere usato per leggere gli eventi. E inoltre, se vuoi leggere il contenuto da esso, possiamo usare Proprietà che è fondamentalmente un elenco di stringhe. Può leggerlo, analizzarlo e ottenere qualunque informazione tu abbia bisogno.

Sono d'accordo che non abbiamo la possibilità di ottenere direttamente tutti i dettagli come quello che otteniamo usando EventLogEntry. Non di meno, abbiamo solo bisogno di fare un po 'di analisi per ottenere ciò di cui abbiamo bisogno usando il registro degli eventi.

Problemi correlati