Gewusst wie: Protokollinformationen über Dienste
Standardmäßig weisen alle Windows-Dienstprojekte die Fähigkeit auf, mit dem Anwendungsereignisprotokoll Daten auszutauschen. Informationen und Ausnahmen können von ihnen dorthin geschrieben werden. Mit der AutoLog-Eigenschaft wird angezeigt, ob diese Funktion in einer Anwendung verwendet werden soll. Standardmäßig ist die Protokollierung für alle Dienste aktiviert, die mit den Projektvorlagen für Windows-Dienste erstellt werden. Mit einer statischen Form der EventLog-Klasse können Dienstinformationen in ein Protokoll geschrieben werden. Zu diesem Zweck muss keine Instanz einer EventLog-Komponente erstellt oder eine Quelle manuell registriert werden.
Bei aktivierter Protokollierung wird automatisch jeder Dienst in einem Projekt vom Installationsprogramm für den Dienst als eine gültige Quelle von Ereignissen für das Anwendungsprotokoll registriert. Dies erfolgt auf dem Computer, auf dem der Dienst installiert wird. Vom Dienst werden jedes Mal Informationen protokolliert, wenn der Dienst gestartet, beendet, angehalten, fortgesetzt, installiert oder deinstalliert wird. Darüber hinaus werden alle auftretenden Fehler protokolliert. Sofern das Standardverhalten verwendet wird, muss kein Code geschrieben werden, damit Einträge in das Protokoll geschrieben werden. Dies wird vom Dienst automatisch behandelt.
Wenn in ein anderes Ereignisprotokoll als das Anwendungsprotokoll geschrieben werden soll, muss die AutoLog-Eigenschaft auf false festgelegt werden. Im Code des Diensts muss ein eigenes benutzerdefiniertes Ereignisprotokoll erstellt werden, und der Dienst muss für das Protokoll als gültige Quelle für Einträge registriert werden. Anschließend muss Code geschrieben werden, mit dem Ereignisse im Protokoll aufgezeichnet werden, wenn eine interessante Aktion auftritt.
Tipp
Wenn Sie die Dienstanwendung so konfiguriert haben, dass diese in ein benutzerdefiniertes Ereignisprotokoll schreibt, muss die ServiceName-Eigenschaft des Diensts festgelegt werden, bevor auf das Ereignisprotokoll zugegriffen werden kann. Das Ereignisprotokoll benötigt den Wert dieser Eigenschaft zum Registrieren des Diensts als gültige Ereignisquelle.
So aktivieren Sie die Standardereignisprotokollierung für den Dienst
Legen Sie die AutoLog-Eigenschaft für die Komponente auf true fest.
Tipp
Diese Eigenschaft ist standardmäßig auf true festgelegt. Dies muss nicht explizit festgelegt werden, sofern keine komplexe Verarbeitung erstellt wird, z. B. Auswerten einer Bedingung und Festlegen der AutoLog-Eigenschaft basierend auf dem Ergebnis dieser Bedingung.
So deaktivieren Sie die Ereignisprotokollierung für den Dienst
Legen Sie die AutoLog-Eigenschaft für die Komponente auf false fest.
Me.AutoLog = False
this.AutoLog = false;
So richten Sie die Protokollierung in einer benutzerdefinierten Protokolldatei ein
Legen Sie die AutoLog-Eigenschaft auf false fest.
Tipp
Um ein benutzerdefiniertes Protokoll verwenden zu können, müssen Sie AutoLog auf false festlegen.
Richten Sie in der Windows-Dienstanwendung eine Instanz der EventLog-Komponente ein.
Erstellen Sie ein benutzerdefiniertes Protokoll, indem Sie die CreateEventSource-Methode aufrufen. Geben Sie die Quellzeichenfolge und den Namen der Protokolldatei an, die erstellt werden soll.
Legen Sie für die Instanz der EventLog-Komponente für die Source-Eigenschaft die Quellzeichenfolge fest, die Sie in Schritt 3 erstellt haben.
Schreiben Sie die Einträge, indem Sie für die Instanz der EventLog-Komponente auf die WriteEntry-Methode zugreifen.
Im folgenden Code wird veranschaulicht, wie Sie ein benutzerdefiniertes Protokoll einrichten.
Tipp
In diesem Codebeispiel wird eine Instanz einer EventLog-Komponente mit eventLog1 (EventLog1 in Visual Basic) benannt. Wenn Sie in Schritt 2 eine Instanz mit einem anderen Namen erstellt haben, ändern Sie den Code entsprechend.
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 Overrides Sub OnStart(ByVal args() As String) ' Write an entry to the log you've created. EventLog1.WriteEntry("In Onstart.") End Sub
public UserService2() { // Turn off autologging this.AutoLog = false; // create an event source, specifying the name of a log that // does not currently exist to create a new, custom log if (!System.Diagnostics.EventLog.SourceExists("MySource")) { System.Diagnostics.EventLog.CreateEventSource( "MySource","MyLog"); } // configure the event log instance to use this source name eventLog1.Source = "MySource"; } ... protected override void OnStart(string[] args) { // write an entry to the log eventLog1.WriteEntry("In OnStart."); }