Freigeben über


Anleitung zum Protokollieren von Informationen über Dienste

Hinweis

Dieser Artikel gilt nicht für gehostete Dienste in .NET. Die neuesten Inhalte zu Windows-Diensten mit Microsoft.Extensions.Hosting.BackgroundService und der Vorlage "Worker Service" finden Sie unter:

Standardmäßig haben alle Windows-Dienstprojekte die Möglichkeit, mit dem Anwendungsereignisprotokoll zu interagieren und Informationen und Ausnahmen zu schreiben. Sie verwenden die AutoLog Eigenschaft, um anzugeben, ob diese Funktionalität in Ihrer Anwendung verwendet werden soll. Standardmäßig ist die Protokollierung für jeden Dienst aktiviert, den Sie mit der Projektvorlage "Windows-Dienst" erstellen. Sie können eine statische Form der EventLog Klasse verwenden, um Dienstinformationen in ein Protokoll zu schreiben, ohne eine Instanz einer EventLog Komponente erstellen oder eine Quelle manuell registrieren zu müssen.

Das Installationsprogramm für Ihren Dienst registriert jeden Dienst in Ihrem Projekt automatisch als gültige Quelle von Ereignissen mit dem Anwendungsprotokoll auf dem Computer, auf dem der Dienst installiert ist, wenn die Protokollierung aktiviert ist. Der Dienst protokolliert Informationen jedes Mal, wenn der Dienst gestartet, beendet, angehalten, fortgesetzt, installiert oder deinstalliert wird. Außerdem werden alle aufgetretenen Fehler protokolliert. Sie müssen keinen Code schreiben, um Einträge in das Protokoll zu schreiben, wenn Sie das Standardverhalten verwenden. der Dienst behandelt dies automatisch.

Wenn Sie in ein anderes Ereignisprotokoll als das Anwendungsprotokoll schreiben möchten, müssen Sie die AutoLog Eigenschaft auf falsefestlegen, ihr eigenes benutzerdefiniertes Ereignisprotokoll in Ihrem Dienstcode erstellen und Ihren Dienst als gültige Quelle von Einträgen für dieses Protokoll registrieren. Sie müssen dann Code schreiben, um Einträge im Protokoll aufzuzeichnen, wenn eine Aktion eintritt, an der Sie interessiert sind.

Hinweis

Wenn Sie ein benutzerdefiniertes Ereignisprotokoll verwenden und Ihre Dienstanwendung so konfigurieren, dass sie in das Ereignisprotokoll geschrieben wird, dürfen Sie nicht versuchen, auf das Ereignisprotokoll zuzugreifen, bevor Sie die Eigenschaft des Diensts ServiceName in Ihrem Code festlegen. Das Ereignisprotokoll benötigt den Wert dieser Eigenschaft, um Ihren Dienst als gültige Quelle von Ereignissen zu registrieren.

So aktivieren Sie die Standardereignisprotokollierung für Ihren Dienst

  • Legen Sie die AutoLog, Eigenschaft für Ihre Komponente auf true.

    Hinweis

    Standardmäßig ist diese Eigenschaft auf truefestgelegt. Sie müssen dies nicht explizit festlegen, es sei denn, Sie erstellen eine komplexere Verarbeitung, z. B. das Auswerten einer Bedingung und das anschließende Festlegen der AutoLog Eigenschaft basierend auf dem Ergebnis dieser Bedingung.

So deaktivieren Sie die Ereignisprotokollierung für Ihren Dienst

  • Legen Sie die AutoLog-Eigenschaft für Ihre Komponente auf false.

    AutoLog = false;
    
    Me.AutoLog = False
    

So richten Sie die Protokollierung in ein benutzerdefiniertes Protokoll ein

  1. Setzen Sie die AutoLog-Eigenschaft auf false.

    Hinweis

    Um ein benutzerdefiniertes Protokoll zu verwenden, müssen Sie AutoLog auf 'false' setzen.

  2. Richten Sie eine Instanz einer EventLog Komponente in Ihrer Windows-Dienstanwendung ein.

  3. Erstellen Sie ein benutzerdefiniertes Protokoll, indem Sie die CreateEventSource Methode aufrufen und die Quellzeichenfolge und den Namen der Protokolldatei angeben, die Sie erstellen möchten.

  4. Legen Sie die Source Eigenschaft für die EventLog Komponenteninstanz auf die Quellzeichenfolge fest, die Sie in Schritt 3 erstellt haben.

  5. Schreiben Sie Ihre Einträge, indem Sie auf die WriteEntry Methode in der EventLog Komponenteninstanz zugreifen.

    Der folgende Code zeigt, wie Sie die Protokollierung für ein benutzerdefiniertes Protokoll einrichten.

    Hinweis

    In diesem Codebeispiel wird eine Instanz einer EventLog Komponente benannt eventLog1 (EventLog1 in Visual Basic). Wenn Sie eine Instanz mit einem anderen Namen in Schritt 2 erstellt haben, ändern Sie den Code entsprechend.

    public UserService2()
    {
        eventLog1 = new EventLog();
        // Turn off autologging
    
        AutoLog = false;
        // create an event source, specifying the name of a log that
        // does not currently exist to create a new, custom log
        if (!EventLog.SourceExists("MySource"))
        {
            EventLog.CreateEventSource(
                "MySource", "MyLog");
        }
        // configure the event log instance to use this source name
        eventLog1.Source = "MySource";
        eventLog1.Log = "MyLog";
    }
    
    Public Sub New()
        ' Turn off autologging
        Me.AutoLog = False
        ' Create a new event source and specify a log name that
        ' does not exist to create a custom log
        If Not System.Diagnostics.EventLog.SourceExists("MySource") Then
            System.Diagnostics.EventLog.CreateEventSource("MySource",
                "MyLog")
        End If
        ' Configure the event log instance to use this source name
        EventLog1.Source = "MySource"
    End Sub
    
    protected override void OnStart(string[] args)
    {
        // write an entry to the log
        eventLog1.WriteEntry("In OnStart.");
    }
    
    Protected Overrides Sub OnStart(ByVal args() As String)
        ' Write an entry to the log you've created.
        EventLog1.WriteEntry("In Onstart.")
    End Sub
    

Siehe auch