Effettuare il backup dell'event viewer con LINQ to XML

Giuseppe Marchi

di Giuseppe Marchi, in LINQ, LINQ To XML, UserScript, il 17 settembre 2008 alle 08:00

La flessibilità di LINQ ci permette di effettuare delle query di selezione su moltissime tipologie di dato. Una di queste può essere il log degli eventi del server (o semplicemente della macchina di sviluppo). Ogni tipologia di sorgente presente all'interno del log in questione è rappresentata nel .NET Framework attraverso una collezione di oggetti di tipo EventLogEntry.
Questa collezione, che viene esposta da una proprietà della classe EventLog, può essere utilizzata come fonte dati per una query LINQ in maniera veramente semplice.

EventLog log = new EventLog(); 
log.Source = "Application"; 
 
var query = from EventLogEntry entry in log.Entries 
            orderby entry.TimeGenerated descending 
            select entry;

Utilizzando un pò di sintassi LINQ to XML, possiamo creare senza troppi sforzi la nostra personale utility per effettuare il backup del log degli eventi di giorno in giorno, su file XML, che possiamo poi decorare con fogli di stile XSLT per renderne più user-friendly la visualizzazione.

var xml = new XDocument( 
    new XElement("ApplicationLog", 
        from EventLogEntry entry in log.Entries 
        orderby entry.TimeGenerated descending 
        select new XElement("Log", 
          new XElement("Message", entry.Message), 
          new XElement("TimeGenerated", entry.TimeGenerated), 
          new XElement("Source", entry.Source), 
          new XElement("EntryType", entry.EntryType.ToString()) 
        ) 
      ) 
    ); 
 
DateTime oggi = DateTime.Now; 
string path = String.Format("{0}_{1}_{2}.xml", oggi.Year, oggi.Month, oggi.Day); 
xml.Save(Path.Combine(Environment.CurrentDirectory, path));

In questo modo, abbiamo una semplice utility di backup dell'event log filtrato per la sorgente "Application".

IL CONTENUTO
IN PRIMO PIANO
MEDIA
IN EVIDENZA
MISC