2010-06-08 8 views
12

J'ai utilisé System.Diagnostics.EventLog pour afficher les journaux sur l'ordinateur local. Cependant, je voudrais ouvrir une archive de journal des événements sauvegardés (.evt ou .evtx) et afficher les journaux contenus dans le fichier enregistré. J'ai juste besoin d'afficher les horodatages, les messages, les sources, etc. associés aux journaux dans le fichier. Cela peut-il être fait en C#?Comment ouvrir une archive de journal d'événements sauvegardée dans .NET?

Répondre

2

Essayez outil LogParser de Microsoft. Il peut extraire toutes les données des journaux de tout format de journal en utilisant une langue de sélection de type SQL. Il peut également être utilisé à partir de n'importe quelle application .NET. L'analyse syntaxique exemple des journaux CSV (je crois que vous pouvez utiliser ce code pour les fichiers EVT avec de petites modifications):

 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

Si votre intention est de lire les journaux enregistrés, nous pouvons le faire en utilisant EventLogReader. Il prend essentiellement deux paramètres - nom de fichier (comme dans le chemin du fichier), et second paramètre spécifiant le type de chemin. À titre de référence, que vous avez un fichier .evtx sauvé - temp.evtx, vous pouvez le lire comme dans:

new EventLogReader(filepath, PathType.Filepath); 

Cela vous donne un lecteur de journal des événements, qui peut être utilisé pour lire les événements. Et plus encore, si vous voulez lire du contenu, nous pouvons utiliser Properties, qui est essentiellement une liste de chaînes. Peut le lire, l'analyser et obtenir toutes les informations dont vous avez besoin. Je suis d'accord que nous n'avons pas la disposition pour obtenir directement tous les détails comme ce que nous obtenons en utilisant EventLogEntry. Néanmoins, nous avons juste besoin d'un peu d'analyse pour obtenir ce dont nous avons besoin en utilisant un enregistrement d'événement.

Questions connexes