08.12.2010

Write to Windows EventLog

In Plug-In- oder Workflows-Assemblys steht man oft vor dem Problem Fehler oder auch nur allgemeine Information protokollieren zu müssen. Bisher war mein Königsweg zur Lösung die Anlage von "C:\Temp", Vollzugriff für jeden auf diesen Ordner um dann die Information in einfachen Textdateien abzulegen.

Funktioniert prinzipiell gut, bis darauf, dass man daran denken muß das Protokollieren auszukommentieren bzw. abzuschalten bevor man den Code in eine produktive Umgebung deployt. Viel naheliegender ist es, das Ereignisprotokoll von Windows zu benutzen.

Für diesen Zweck hier zwei kleine Methoden, über die man genau das realisieren kann.

Eine Nachricht in die Ereignisanzeige schreiben:
Log("Info Item");

Eine Nachricht als bestimmten Typ in die Ereignisanzeige schreiben:
Log("Warning Item", System.Diagnostics.EventLogEntryType.Warning);

Folgende Ereignistypen gibt es:
- Error
- FailureAudit
- Information
- SuccessAudit
- Warning

logName:
Der Protokollname, unter dem die Einträge auf der linken Seite in der Baumansicht der Ereignisanzeige gruppiert werden.

sourceName:
Der Name Quelle in der Ereignisanzeige.

Hier der Quelltext:

public static void Log(string logMessage)
{
    Log(logMessage, System.Diagnostics.EventLogEntryType.Information);
}


public static void Log(string logMessage, System.Diagnostics.EventLogEntryType logEventType)
{
    string logName = "My Log Name";
    string sourceName = "My Source Name";

    if (!System.Diagnostics.EventLog.SourceExists(sourceName))
        System.Diagnostics.EventLog.CreateEventSource(sourceName, logName);


    System.Diagnostics.EventLog appLog = new System.Diagnostics.EventLog();
    appLog.Source = sourceName;
    appLog.WriteEntry(logMessage, logEventType);
}


Achtung:
Unter Windows 7 muss man das Visual Studio bzw. die Anwendung, welche die oben aufgeführten Methoden integriert, als Administrator starten, um in die Ereignisanzeige schreiben zu können.