Compartir a través de


Cómo suscribirse a eventos de un registro de eventos

Puede suscribirse a eventos de un registro de eventos para notificar a la aplicación cuándo se publican eventos específicos en el registro de eventos. Esto le permitirá supervisar registros de eventos y ejecutar tareas o enviar notificaciones cuando ocurra un evento. Cuando se suscribe para recibir notificaciones de eventos, especifica una consulta basada en XPath para un grupo de eventos que coincida con un determinado criterio de búsqueda. La consulta filtra los eventos basándose en las propiedades de eventos. Por ejemplo, se puede suscribir a todos los eventos de nivel 2 de un determinado registro de eventos o suscribirse a todos los eventos con un identificador igual a 105.

Ejemplo

Descripción

En el siguiente ejemplo de código se utilizan las clases System.Diagnostics.Eventing.Reader para suscribirse para recibir notificaciones de eventos para todos los eventos de nivel 2 del registro de eventos de la aplicación. Cuando se publica un evento en el registro de eventos que coincida con este criterio, la descripción y el Id. de evento se muestran para el evento. La clase EventLogQuery se utiliza para crear una consulta de los eventos a los que se desea suscribir. La clase EventLogWatcher se utiliza para crear la suscripción mediante el establecimiento de un método de controlador de eventos para el evento EventRecordWritten. Se llama al método de controlador de eventos cuando un evento que coincide con el criterio de búsqueda se publica en el registro.

En el siguiente ejemplo de código se muestra una serie de pasos para suscribirse a los eventos.

  1. Cree una instancia de la clase EventLogQuery especificando una cadena de consulta usada para filtrar eventos así como el nombre o la ubicación del registro de eventos al que suscribirse. Para obtener más información sobre cómo buscar nombres de registros de eventos, vea Cómo configurar y leer propiedades del registro de eventos o busque registros de eventos en la herramienta Visor de eventos. Para obtener más información sobre cómo crear una cadena de consulta de eventos, vea Consultas de eventos y XML de eventos.

  2. (Opcional) Para suscribirse a eventos en un equipo remoto, establezca la propiedad Session en una instancia de la clase EventLogSession y especifique el nombre del equipo remoto, el dominio y el nombre de usuario y la contraseña usados para conectarse al equipo remoto.

  3. Cree una nueva instancia de EventLogWatcher pasando la instancia de EventLogQuery creada en el paso 1 al constructor EventLogWatcher.

  4. Cree un método de devolución de llamada que se ejecutará cuando se informe de un evento a la suscripción. Este método acepta argumentos de tipo Object y EventRecordWrittenEventArgs.

  5. Establezca el controlador de eventos EventRecordWritten en un nuevo controlador de eventos que apunte al método de devolución de llamada creado en el paso 4.

  6. Establezca la propiedad Enabled en true para iniciar la suscripción de eventos y en false para detenerla.

Código

Imports System
Imports System.Diagnostics.Eventing.Reader

Public Class SubscribeToEventsExample

    Public Sub New()

        Dim watcher As EventLogWatcher
        watcher = Nothing

        Try

            ' Subscribe to receive event notifications
            ' in the Application log. The query specifies
            ' that only level 2 events will be returned.
            Dim subscriptionQuery As New EventLogQuery( _
                "Application", PathType.LogName, "*[System/Level=2]")

            watcher = New EventLogWatcher(subscriptionQuery)

            ' Set watcher to listen for the EventRecordWritten
            ' event.  When this event happens, the callback method
            ' (EventLogEventRead) will be called.
            AddHandler watcher.EventRecordWritten, _
                AddressOf Me.HandleEvent

            ' Begin subscribing to events the events
            watcher.Enabled = True
            Console.WriteLine("Waiting for events...")

            Dim i As Integer
            For i = 0 To 4
                If i < 5 Then
                    ' Wait for events to occur. 
                    System.Threading.Thread.Sleep(1000)
                End If
            Next

        Catch e As EventLogReadingException

            Console.WriteLine("Error reading the log: {0}", e.Message)

        Finally

            ' Stop listening to events
            watcher.Enabled = False

            If Not watcher Is Nothing Then
                watcher.Dispose()
            End If

        End Try
    End Sub

    ' <summary>
    ' Callback method that gets executed when an event is
    ' reported to the subscription.
    ' </summary>
    Public Sub HandleEvent(ByVal obj As Object, _
        ByVal arg As EventRecordWrittenEventArgs)

        ' Make sure there was no error reading the event.
        If Not arg.EventRecord Is Nothing Then

            Console.WriteLine("Received event {0} from the subscription.", _
               arg.EventRecord.Id)
            Console.WriteLine("Description: {0}", arg.EventRecord.FormatDescription())
        Else

            Console.WriteLine("The event instance was null.")
        End If
    End Sub

    Public Overloads Shared Function Main( _
    ByVal args() As String) As Integer

        ' Start the event watcher
        Dim eventWatcher As New SubscribeToEventsExample

        Return 0

    End Function
End Class
using System;
using System.Diagnostics.Eventing.Reader;

class SubscribeToEventsExample
{
    static void Main(string[] args)
    {
        EventLogWatcher watcher = null;

        try
        {
            // Subscribe to receive event notifications
            // in the Application log. The query specifies
            // that only level 2 events will be returned.
            EventLogQuery subscriptionQuery = new EventLogQuery(
                "Application", PathType.LogName, "*[System/Level=2]");

            watcher = new EventLogWatcher(subscriptionQuery);

            // Set watcher to listen for the EventRecordWritten
            // event.  When this event happens, the callback method
            // (EventLogEventRead) will be called.
            watcher.EventRecordWritten +=
                new EventHandler<EventRecordWrittenEventArgs>(
                    EventLogEventRead);

            // Begin subscribing to events the events
            watcher.Enabled = true;

            for (int i = 0; i < 5; i++)
            {
                // Wait for events to occur. 
                System.Threading.Thread.Sleep(1000);
            }
        }
        catch (EventLogReadingException e)
        {
            Console.WriteLine("Error reading the log: {0}", e.Message);
        }
        finally
        {
            // Stop listening to events
            watcher.Enabled = false;

            if (watcher != null)
            {
                watcher.Dispose();
            }
        }
    }

    /// <summary>
    /// Callback method that gets executed when an event is
    /// reported to the subscription.
    /// </summary>
    public static void EventLogEventRead(object obj,
        EventRecordWrittenEventArgs arg)
    {
        // Make sure there was no error reading the event.
        if (arg.EventRecord != null)
        {
            Console.WriteLine("Received event {0} from the subscription.",
               arg.EventRecord.Id);
            Console.WriteLine("Description: {0}", arg.EventRecord.FormatDescription());
        }
        else
        {
            Console.WriteLine("The event instance was null.");
        }
    }
}

Compilar el código

Este ejemplo de código requiere referencias a los archivos System.dll y System.Core.dll.

Consulte también

Conceptos

Escenarios de registros de eventos
Cómo tener acceso y leer información de eventos

Footer image

Enviar comentarios sobre este tema a Microsoft.

Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.