Freigeben über


Verfahrensweise: Abonnieren von Ereignissen in einem Ereignisprotokoll

Sie können Ereignisse in einem Ereignisprotokoll abonnieren, damit Ihre Anwendung benachrichtigt wird, wenn bestimmte Ereignisse im Ereignisprotokoll veröffentlicht werden. Auf diese Weise können Sie Ereignisprotokolle überwachen und bei Auftreten eines Ereignisses Tasks ausführen oder Benachrichtigungen senden. Wenn Sie den Empfang von Ereignisbenachrichtigungen abonnieren, geben Sie eine Abfrage auf Basis von XPath für eine Gruppe von Ereignissen an, die einem bestimmten Abfragekriterium entsprechen. Die Abfrage filtert Ereignisse auf Grundlage von Ereigniseigenschaften. So können Sie beispielsweise alle Ereignisse der 2. Stufe in einem bestimmten Ereignisprotokoll abonnieren oder alle Ereignisse mit einem Bezeichner von "105".

Beispiel

Beschreibung

Im folgenden Codebeispiel wird mithilfe der System.Diagnostics.Eventing.Reader-Klassen der Empfang von Ereignisbenachrichtigungen für alle Ereignisse der 2. Stufe im Anwendungsereignisprotokoll abonniert. Wird ein Ereignis, das den angegebenen Kriterien entspricht, im Ereignisprotokoll veröffentlicht, werden die Beschreibung und die Ereignis-ID für das Ereignis angezeigt. Mithilfe der EventLogQuery-Klasse wird die Abfrage für die Ereignisse erstellt, die Sie abonnieren möchten. Danach wird mithilfe der EventLogWatcher-Klasse das Abonnement erstellt, indem eine Ereignishandlermethode für das EventRecordWritten-Ereignis festgelegt wird. Die Ereignishandlermethode wird aufgerufen, wenn ein den Abfragekriterien entsprechendes Ereignis im Protokoll veröffentlicht wird.

Das folgende Codebeispiel durchläuft eine Abfolge von Schritten, um Ereignisse zu abonnieren.

  1. Erstellen Sie eine Instanz der EventLogQuery-Klasse, indem Sie eine Abfragezeichenfolge angeben, mit der Ereignisse gefiltert werden, sowie den Namen oder Speicherort des zu abonnierenden Ereignisprotokolls. Weitere Informationen zum Auffinden von Ereignisprotokollnamen finden Sie unter Verfahrensweise: Konfigurieren und Lesen von Ereignisprotokolleigenschaften, oder indem Sie in der Ereignisanzeige nach Ereignisprotokollen suchen. Weitere Informationen zum Erstellen einer Abfragezeichenfolge für Ereignisse finden Sie unter Ereignisabfragen und Ereignis-XML-Code.

  2. (Optional) Legen Sie zum Abonnieren von Ereignissen auf einem Remotecomputer die Session-Eigenschaft auf eine Instanz der EventLogSession-Klasse fest, und geben Sie den Remotecomputernamen, dessen Domäne und den Benutzernamen mit Kennwort an, mit denen eine Verbindung mit dem Remotecomputer hergestellt wird.

  3. Erstellen Sie eine neue EventLogWatcher-Instanz, indem Sie die in Schritt 1 erstellte EventLogQuery-Instanz an den EventLogWatcher-Konstruktor übergeben.

  4. Erstellen Sie eine Rückrufmethode, die ausgeführt wird, wenn dem Abonnement ein Ereignis gemeldet wird. Diese Methode muss Argumente vom Typ Object und EventRecordWrittenEventArgs akzeptieren.

  5. Legen Sie den EventRecordWritten-Ereignishandler auf einen neuen Ereignishandler fest, der auf die in Schritt 4 erstellt Rückrufmethode zeigt.

  6. Legen Sie die Enabled-Eigenschaft auf true fest, um das Ereignisabonnement zu starten, und auf false, um das Ereignisabonnement zu beenden.

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.");
        }
    }
}

Kompilieren des Codes

Für dieses Codebeispiel werden Verweise auf die Dateien System.dll und System.Core.dll benötigt.

Siehe auch

Konzepte

Ereignisprotokollszenarien
Verfahrensweise: Zugreifen auf und Lesen von Ereignisinformationen

Footer image

Senden Sie Kommentare zu diesem Thema an Microsoft.

Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.