Freigeben über


Vorgehensweise: Protokollinformationen ü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 die Workerdienstvorlage finden Sie unter:

Standardmäßig können alle Windows-Dienst-Projekte auf das Anwendungsereignisprotokoll zugreifen und Informationen sowie Ausnahmen in das Protokoll schreiben. Sie geben über die AutoLog -Eigenschaft an, ob Sie diese Funktionalität in Ihrer Anwendung nutzen möchten. Standardmäßig ist die Protokollierung für jeden Dienst aktiviert, den Sie mit den Projektvorlagen für Windows-Dienste erstellen. Sie können eine statische Form der EventLog -Klasse verwenden, um Dienstinformationen in ein Protokoll zu schreiben, ohne dass Sie eine Instanz von einer EventLog -Komponente erstellen oder eine Quelle manuell registrieren müssen.

Das Installationsprogramm für Ihren Dienst registriert jeden Dienst in Ihrem Projekt automatisch als gültige Quelle von Ereignissen für das Anwendungsprotokoll auf dem Computer, auf dem der Dienst installiert ist, wenn die Protokollierung aktiviert ist. Der Dienst protokolliert jedes Mal Informationen, wenn er gestartet, beendet, angehalten, fortgesetzt, installiert oder deinstalliert wird. Der Dienst protokolliert auch alle auftretenden Fehler. Wird das Standardverhalten verwendet, müssen Sie keinen Code schreiben, damit Einträge in das Protokoll geschrieben werden. Dies wird vom Dienst automatisch erledigt.

Wenn Sie möchten, dass nicht in das Anwendungsprotokoll, sondern in ein anderes Ereignisprotokoll geschrieben werden soll, müssen Sie die AutoLog -Eigenschaft auf falsefestlegen, im Code Ihres Diensts Ihr eigenes Ereignisprotokoll erstellen und den Dienst als eine gültige Quelle für Einträge für dieses Protokoll registrieren. Danach müssen Sie Code schreiben, mit dem jedes Mal dann Einträge im Protokoll festgehalten werden, wenn eine Aktion auftritt, an der Sie interessiert sind.

Hinweis

Wenn Sie ein benutzerdefiniertes Ereignisprotokoll verwenden und Ihren Dienst so konfigurieren, dass er in dieses Protokoll schreibt, dürfen Sie nicht versuchen, auf das Ereignisprotokoll zuzugreifen, bevor die ServiceName -Eigenschaft des Diensts im Code festgelegt wurde. Der Wert dieser Eigenschaft ist für das Ereignisprotokoll erforderlich, damit Ihr Dienst als gültige Quelle für Ereignisse registriert werden kann.

So aktivieren Sie die Standardereignisprotokollierung für Ihren Dienst

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

    Hinweis

    Standardmäßig ist diese Eigenschaft auf truefestgelegt. Sie müssen dies nur dann explizit festlegen, wenn Sie eine komplexere Verarbeitung erstellen, etwa Auswerten einer Bedingung und dann Festlegen der AutoLog -Eigenschaft anhand des Ergebnisses dieser Bedingung.

So deaktivieren Sie die Ereignisprotokollierung für Ihren Dienst

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

    AutoLog = false;
    
    Me.AutoLog = False
    

So richten Sie die Protokollierung in eine benutzerdefinierte Protokolldatei ein

  1. Legen Sie die AutoLog -Eigenschaft auf falsefest.

    Hinweis

    Sie müssen AutoLog auf „false“ festlegen, damit ein benutzerdefiniertes Protokoll verwendet werden kann.

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

  3. Erstellen Sie ein benutzerdefiniertes Protokoll, indem Sie die CreateEventSource -Methode aufrufen sowie die Quellzeichenfolge und den Namen der Protokolldatei angeben, die erstellt werden soll.

  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 die Einträge, indem Sie auf die WriteEntry -Methode der EventLog -Komponenteninstanz zugreifen.

    Im folgenden Code wird veranschaulicht, wie Sie Protokollierung in ein benutzerdefiniertes Protokoll einrichten.

    Hinweis

    In diesem Codebeispiel wird eine Instanz einer EventLog -Komponente mit eventLog1 benannt (EventLog1 in Visual Basic). Wenn Sie in Schritt 2 eine Instanz mit einem anderen Namen 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