2012-09-12 8 views
8

Tengo el siguiente código:EventLogQuery: ¿Cómo se forma una cadena de consulta?

string query = "???"; 

EventLogQuery elq = new EventLogQuery("Application", PathType.LogName, query); 
elq.Session = new EventLogSession("x.x.x.x"); 
EventLogReader elr = new EventLogReader(elq); 

Estoy tratando de averiguar lo que necesito fijar consulta a fin de buscar todas las entradas con una fuente de "SQLSERVERAGENT".

+2

Si uso Event Viewer para establecer un filtro, puedo ver la consulta XML sin procesar que está utilizando. Obtengo una cadena como '" Aplicación "> * [Sistema [Proveedor [@ Nombre = 'Nombre de fuente']]]'. ¿Algo de esto funciona (todo el asunto, menos la etiqueta XML, o simplemente 'Provider [@Name = '...']'? –

+0

sería [C#: ¿Cómo consultar los detalles de un registro de eventos con una identificación de evento determinada? ] (http://stackoverflow.com/questions/2462426/c-how-to-query-for-an-event-log-details-with-a-given-event-id) ayuda? – Turbot

+0

Creo que [esta publicación es la respuesta] [1] [1]:. http://stackoverflow.com/a/8575390/284758 –

Respuesta

1

Acabo de pasar una hora tratando de resolver de manera similar para mí y pensé que contribuiría de nuevo con la solución para cualquier otra persona que venga de esta manera. Los comentarios deberían ser bastante auto explicativos.

public void ReadSqlAgentEventMessages() 
     { 
      // Force culture to en-US if required, some people get a null from FormatDescription() and this appently solves it. 
      // My culture is set as en-GB and I did not have the issue, so I have left it as a comment to possibly ease someone's pain! 
      // Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); 

      EventLogQuery eventlogQuery = new EventLogQuery("Application", PathType.LogName, "*[System/Provider/@Name=\"SQLSERVERAGENT\"]"); 
      EventLogReader eventlogReader = new EventLogReader(eventlogQuery); 

      // Loop through the events returned 
      for (EventRecord eventRecord = eventlogReader.ReadEvent(); null != eventRecord; eventRecord = eventlogReader.ReadEvent()) 
      { 
       // Get the description from the eventrecord. 
       string message = eventRecord.FormatDescription(); 

       // Do something cool with it :) 
      } 
     } 
Cuestiones relacionadas