EventLog-Klasse
Ermöglicht die Interaktion mit Windows-Ereignisprotokollen.
Namespace: System.Diagnostics
Assembly: System (in system.dll)
Syntax
'Declaration
Public Class EventLog
Inherits Component
Implements ISupportInitialize
'Usage
Dim instance As EventLog
public class EventLog : Component, ISupportInitialize
public ref class EventLog : public Component, ISupportInitialize
public class EventLog extends Component implements ISupportInitialize
public class EventLog extends Component implements ISupportInitialize
Hinweise
Mit EventLog können Sie auf Windows-Ereignisprotokolle zugreifen, in denen Informationen über wichtige Software- und Hardwareereignisse gespeichert werden, und diese anpassen. Unter Verwendung von EventLog können Sie aus vorhandenen Protokollen lesen, Einträge in Protokolle schreiben, Ereignisquellen erstellen oder löschen, Protokolle löschen und auf Protokollereignisse reagieren. Ferner können Sie auch bei der Erstellung einer Ereignisquelle neue Protokolle erstellen.
Wichtig
Wenn Sie ein EventLog-Objekt erstellen, einen Eintrag schreiben und anschließend das EventLog-Objekt an teilweise vertrauenswürdigen Code übergeben, kann dies zu einem Sicherheitsproblem führen. Übergeben Sie nie ein Ereignisprotokollobjekt, z. B. ein EventLogEntry-Objekt oder ein EventLogEntryCollection-Objekt, an weniger vertrauenswürdigen Code.
Wichtig
In Version1.0 und 1.1 von .NET Framework müssen unmittelbare Aufrufer dieser Klasse voll vertrauenswürdig sein. In Version 2.0 erfordert diese Klasse für bestimme Aktionen EventLogPermission. Es wird dringend empfohlen, EventLogPermission nicht für teilweise vertrauenswürdigen Code zu erteilen. Die Fähigkeit, das Ereignisprotokoll zu lesen und in dieses zu schreiben, erlaubt Code die Ausführung von Aktionen wie dem Ausgeben von Ereignisprotokollmeldungen im Namen einer anderen Anwendung.
Wichtig
Das Erstellen oder Löschen einer Ereignisquelle erfordert die Synchronisierung des zugrunde liegenden Codes mithilfe eines benannten Mutex. Wenn eine Anwendung mit sehr weitreichenden Berechtigungen den benannten Mutex sperrt oder versucht, zu erstellen bzw. zu löschen, bewirkt eine Ereignisquelle, dass die Anwendung nicht mehr reagiert, bis die Sperre wieder aufgehoben wird. Um dieses Problem zu vermeiden, sollten Sie nicht vertrauenswürdigem Code niemals eineUnmanagedCode-Berechtigung gewähren. Darüber hinaus ermöglicht die UnmanagedCode-Berechtigung das Umgehen anderer Berechtigungen und sollte daher nur sehr vertrauenswürdigem Code gewährt werden.
Geben Sie zum Lesen aus einem Protokoll den Log-Namen und den MachineName (Name des Servercomputers) für das EventLog an. Source muss nicht angegeben werden, da nur für das Schreiben in Protokolle eine Quelle erforderlich ist. Der Entries-Member wird automatisch mit der Liste der Einträge des Ereignisprotokolls aufgefüllt.
Hinweis
Sie müssen keinen MachineName angeben, wenn Sie beim Verbindungsaufbau mit einem Protokoll ein Log/MachineName-Paar angeben. Wenn Sie keinen MachineName angeben, wird der lokale Computer (".") verwendet.
Wenn Sie in ein Ereignisprotokoll schreiben, müssen Sie eine Source für ein Ereignis angeben oder erstellen. Sie benötigen Administratorrechte für den Computer, um eine neue Ereignisquelle zu erstellen. Die Source registriert die Anwendung im Ereignisprotokoll als gültige Quelle für Einträge. Sie können mit Source zu einem Zeitpunkt in nur ein Protokoll schreiben. Source kann eine beliebige Zeichenfolge sein, der Name muss sich jedoch von dem anderer Quellen auf dem Computer unterscheiden. Üblicherweise besteht der Name der Quelle aus dem Namen der Anwendung oder einer anderen bezeichnenden Zeichenfolge. Beim Versuch, einen doppelten Source-Wert zu erstellen, wird eine Ausnahme ausgelöst. Ein einzelnes Ereignisprotokoll kann jedoch mehreren Quellen zugeordnet werden.
Hinweis
Anwendungen können nicht daran gehindert werden, Schreibvorgänge wie jede andere registrierte Quelle auszuführen. Wenn einer Anwendung die Write-Berechtigung gewährt wird, kann sie Ereignisse für jede auf dem Computer registrierte gültige Quelle schreiben.
Anwendungen und Dienste schreiben in das Anwendungsprotokoll oder ein benutzerdefiniertes Protokoll. Gerätetreiber schreiben i. d. R. in das Systemprotokoll. Wenn Sie die Log-Eigenschaft nicht explizit festlegen, ist das Standardereignisprotokoll das Anwendungsprotokoll.
Hinweis
Das Sicherheitsprotokoll ist schreibgeschützt.
Verwenden Sie WriteEvent und WriteEntry, um Ereignisse in ein Ereignisprotokoll zu schreiben. Sie müssen zum Schreiben von Ereignissen eine Ereignisquelle angeben. Bevor Sie den ersten Eintrag mit der Quelle schreiben, müssen Sie die Ereignisquelle erstellen und konfigurieren.
Erstellen Sie die neue Ereignisquelle während der Installation der Anwendung. So hat das Betriebssystem Zeit, die Liste der registrierten Ereignisquellen und deren Konfiguration zu aktualisieren. Wenn die Liste der Ereignisquellen vom Betriebssystem nicht aktualisiert wurde und Sie versuchen, ein Ereignis für die neue Quelle zu schreiben, schlägt der Schreibvorgang fehl. Sie können eine neue Quelle entweder mithilfe eines EventLogInstaller oder mithilfe der CreateEventSource-Methode erstellen. Sie benötigen Administratorrechte für den Computer, um eine neue Ereignisquelle zu erstellen.
Jede Quelle kann immer nur in ein Ereignisprotokoll schreiben. Die Anwendung kann jedoch mehrere Quellen verwenden, um in mehrere Ereignisprotokolle zu schreiben. Beispielsweise müssen für die Anwendung eventuell mehrere Quellen für unterschiedliche Ereignisprotokolle oder Ressourcendateien konfiguriert werden. Wenn Sie die Konfiguration einer vorhandenen Quelle ändern möchten, müssen Sie sie löschen und mit der neuen Konfiguration neu erstellen. Wenn andere Anwendungen oder Komponenten die vorhandene Quelle nutzen, erstellen Sie eine neue Quelle mit der aktualisierten Konfiguration, anstatt die vorhandene Quelle zu löschen.
Sie können die Ereignisquelle in mehreren lokalisierten Ressourcen für die Ereigniskategorie und Meldungszeichenfolgen registrieren. Die Anwendung kann Ereignisprotokolleinträge mit Ressourcenbezeichnern schreiben, anstatt die tatsächlichen Zeichenfolgenwerte anzugeben. Weitere Informationen über das Konfigurieren der Quelle mit Ressourcendateien finden Sie unter der EventLogInstaller-Klasse und der EventSourceCreationData-Klasse.
Wenn die Anwendung Zeichenfolgenwerte direkt in das Ereignisprotokoll schreibt, müssen Sie die Eigenschaften der Ressourcendatei für die Quelle nicht festlegen. Die Quelle muss entweder zum Schreiben lokalisierter Einträge oder zum Schreiben direkter Zeichenfolgen konfiguriert werden. Wenn die Anwendung beim Schreiben von Einträgen sowohl Ressourcenbezeichner als auch Zeichenfolgenwerte verwendet, müssen Sie zwei getrennte Quellen registrieren. Konfigurieren Sie beispielsweise eine Quelle mit Ressourcendateien, und verwenden Sie diese Quelle dann in der WriteEvent-Methode, um Einträge mithilfe von Ressourcenbezeichnern in das Ereignisprotokoll zu schreiben. Erstellen Sie dann eine andere Quelle ohne Ressourcendateien, und verwenden Sie diese Quelle in der WriteEntry-Methode, um Zeichenfolgen mithilfe dieser Quelle direkt in das Ereignisprotokoll zu schreiben.
Beim Schreiben von Ereignissen müssen Sie mindestens eine Meldungszeichenfolge oder den Ressourcenbezeichner für eine Meldungszeichenfolge angeben. Weitere Ereigniseigenschaften sind optional. Beispielsweise können folgende optionalen Ereigniseinstellungen festgelegt werden: Sie können den EventLogEntryType festlegen, um das von der Ereignisanzeige für den Eintrag angezeigte Symbol anzugeben. Sie können einen Kategoriebezeichner für das Ereignis angeben, wenn die Anwendung die Ereignisse mithilfe von Kategorien filtert. Sie können auch Binärdaten an den Ereigniseintrag anfügen, wenn Sie einem bestimmten Ereignis weitere Informationen zuordnen müssen.
Neben dem Zugriff auf einzelne Ereignisprotokolle und deren Einträge ermöglicht die EventLog-Klasse auch den Zugriff auf die Auflistung aller Ereignisprotokolle. Mit den static-Membern von EventLog können Sie Protokolle löschen, Protokolllisten abrufen, eine Quelle erstellen bzw. löschen oder bestimmen, ob ein Computer bereits eine bestimmte Quelle enthält.
Es gibt drei Standardereignisprotokolle: Anwendung, System und Sicherheit. Andere installierte Anwendungen und Dienste wie Active Directory verfügen möglicherweise über zusätzliche Ereignisprotokolle. Sie können mit EventLog benutzerdefinierte Ereignisprotokolle erstellen, die Sie in der Ereignisanzeige des Servers anzeigen lassen können. Mit der RegisterDisplayName-Methode zeigen Sie einen lokalisierten Namen für das Ereignisprotokoll in der Ereignisanzeige an. Mit der ModifyOverflowPolicy-Methode konfigurieren Sie das Verhalten des Ereignisprotokolls, wenn dessen maximale Protokollgröße erreicht wird.
Das Protokollieren von Ereignissen beansprucht Speicherplatz, Prozessorzeit und andere Systemressourcen. Sie sollten daher nur wichtige Informationen protokollieren. Es wird empfohlen, dass Sie Aufrufe des Ereignisprotokolls in einem Pfad für Fehler und nicht im Hauptpfad des Codes platzieren, um die Leistung nicht zu beeinträchtigen.
Eine Liste der anfänglichen Eigenschaftenwerte für eine Instanz von EventLog finden Sie unter dem EventLog-Konstruktor.
Hinweis zu Windows 98, Windows Millennium Edition: Ereignisprotokolle werden unter Windows 98 oder Windows Millennium Edition (Me) nicht unterstützt.
Beispiel
Im folgenden Beispiel wird die Quelle MySource
erstellt, wenn sie nicht bereits vorhanden ist, und anschließend ein Eintrag in das Ereignisprotokoll MyNewLog
geschrieben.
Option Explicit
Option Strict
Imports System
Imports System.Diagnostics
Imports System.Threading
Class MySample
Public Shared Sub Main()
' Create the source, if it does not already exist.
If Not EventLog.SourceExists("MySource") Then
EventLog.CreateEventSource("MySource", "MyNewLog")
Console.WriteLine("CreatingEventSource")
End If
' Create an EventLog instance and assign its source.
Dim myLog As New EventLog()
myLog.Source = "MySource"
' Write an informational entry to the event log.
myLog.WriteEntry("Writing to event log.")
End Sub 'Main
End Class 'MySample
using System;
using System.Diagnostics;
using System.Threading;
class MySample{
public static void Main(){
// Create the source, if it does not already exist.
if(!EventLog.SourceExists("MySource")){
EventLog.CreateEventSource("MySource", "MyNewLog");
Console.WriteLine("CreatingEventSource");
}
// Create an EventLog instance and assign its source.
EventLog myLog = new EventLog();
myLog.Source = "MySource";
// Write an informational entry to the event log.
myLog.WriteEntry("Writing to event log.");
}
}
#using <System.dll>
using namespace System;
using namespace System::Diagnostics;
using namespace System::Threading;
int main()
{
// Create the source, if it does not already exist.
if ( !EventLog::SourceExists( "MySource" ) )
{
EventLog::CreateEventSource( "MySource", "MyNewLog" );
Console::WriteLine( "CreatingEventSource" );
}
// Create an EventLog instance and assign its source.
EventLog^ myLog = gcnew EventLog;
myLog->Source = "MySource";
// Write an informational entry to the event log.
myLog->WriteEntry( "Writing to event log." );
}
import System.*;
import System.Diagnostics.*;
import System.Threading.*;
class MySample
{
public static void main(String[] args)
{
// Create the source, if it does not already exist.
if (!(EventLog.SourceExists("MySource"))) {
EventLog.CreateEventSource("MySource", "MyNewLog");
Console.WriteLine("CreatingEventSource");
}
// Create an EventLog instance and assign its source.
EventLog myLog = new EventLog();
myLog.set_Source("MySource");
// Write an informational entry to the event log.
myLog.WriteEntry("Writing to event log.");
} //main
} //MySample
Vererbungshierarchie
System.Object
System.MarshalByRefObject
System.ComponentModel.Component
System.Diagnostics.EventLog
Threadsicherheit
Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.
Plattformen
Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.
Versionsinformationen
.NET Framework
Unterstützt in: 2.0, 1.1, 1.0
Siehe auch
Referenz
EventLog-Member
System.Diagnostics-Namespace
EventLogInstaller
EventLogEntry
EntryWrittenEventArgs-Klasse
ServiceBase
Weitere Ressourcen
Protokollieren von Anwendungs-, Server- und Sicherheitsereignissen