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 :)
}
}
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 = '...']'? –
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
Creo que [esta publicación es la respuesta] [1] [1]:. http://stackoverflow.com/a/8575390/284758 –