EventLogManager
Aktuelle Version: 1.2.4789.27658
Benötigte .NET Framework Version: 2.0
Beschreibung:
Der PS EventLogManager stellt Funktionalität bereit um Ereignisse zur Laufzeit der Anwendung zu Protokollieren. Er ist beliebig um weitere LogEngines erweiterbar und unterstützt derzeit das Protokollieren in das Windows Ereignisprotokoll, sowie in Xml-Dateien.
Release Log:
05.10.2010 Version 1.0
07.10.2010: Bug im XmlLogger zur Todo-List hinzugefügt.
11.10.2010 Version 1.1
Bug behoben
Anzeige der Einträge überarbeitet
Funktion zum abrufen der Logeinträge hinzugefügt (GetLogEntries())
10.02.2013 Version 1.2
EventLogManager erweitert um Nutzerdefinierte Loggertypen verwenden zu können
spezifische Logger sind nun in eigenen Assemblies
standard Dialog zur Anzeige der Logeinträge entfernt
Initialisierung des EventLogManagers:
Der EventLogManager lässt sich auf 2 Arten initialisieren, zum einen durch Definition der Assembly (welche die LogEngine enthält) und der Konfigurationsdatei für den Logger in der Anwendungskonfigurationsdatei, zum anderen durch Übergabe dieser Informationen als Parameter der Initialize Methode.
Für die Initialisierung aus der Anwendungskonfiguration, muss diese den folgenden Konfigurationsabschnitt enthalten:
<configSections>
<section
name="loggerSettings"
type="PS.Utilities.Logging.LoggerConfigurationSection, PS.Utilities.Logging"
/>
</configSections>
<loggerSettings>
<assembly name="PS.Utilities.Logging.XmlLogger" />
<settingsFile path="ConfigFile_Event.xml" />
</loggerSettings>
Verwendungsbeispiel:
using PS.Utilities.Logging;
namespace PS.TestApplikation
{
public class Program
{
/// <summary>
/// Der Haupteinstiegspunkt für die Anwendung.
/// </summary>
[STAThread]
static void Main()
{
// the PS EventLogManager is static so we just have to initialize it
PSEV.Initialize();
// PSEV.Initialize("PS.Utilities.Logging.XmlLogger", "ConfigFile_Event.xml");
// write an event
PSEV.WriteEvent("Anwendung wurde erfolgreich gestartet.", null, LogEntryType.SuccessAudit);
// uninitialize the event manager
PSEV.Uninitialize();
}
}
}
Für die Verwendung des EventLogManagers ist lediglich ein Verweis auf die Assembly PS.Utilities.Logging notwendig. Wichtig ist jedoch, das die Assembly mit der zu verwendenten LogEngine im Anwendungspfad vorhanden ist.
Zu Beachten ist, dass der EventLogManager nur einmal zu Programmstart initialisiert werden muss. - Dannach kann auf die bereitgestellten Methoden direkt zugegriffen werden.
Konfiguration der LogEngine
onfiguriert wird der PS EventLogManager durch eine eigene Konfigurationsdatei.
Der Inhalt der Konfigurationsdatei ist abhängig von der LogEngine. Jede LogEngine kann eine typisierte LogEngine erhalten.
Für die beiden Standardengines sehen die Konfigurationsdateien wie folgt aus:
Konfiguriert wird der PS EventLogManager durch eine eigene Konfigurationsdatei.
Für die Verwendung des Windows Ereignisprotokolls ist folgendes Konfigurationsdesign notwendig:
<?xml version="1.0" encoding="utf-8" ?>
<Configuration>
<!-- The Event Source - Free editable -->
<EventSource>PS_Test</EventSource>
<!-- The Event Log - Free editable -->
<EventLog>PS Test</EventLog>
</Configuration>
Für die Verwendung einer Xml-Protokollierung ist folgendes Xml-Design notwendig:
<?xml version="1.0" encoding="utf-8" ?>
<Configuration>
<!-- The file where the log entries should be written to. - Free editable -->
<LogFile>ps_log.xml</LogFile>
</Configuration>
Der Pfad zu dieser Konfigurationsdatei wird im oben beschriebenen Konfigurationsabschnitt festgelegt.
Abruf der Logeinträge
Über die Methode GetLogEntries können alle Logeinträge abgerufen werden, zum Beispiel zur Ausgabe auf einem eigenen Dialog.
Besonderheiten
Unter Windows XP kann der LogType EventLog problemlos verwendet werden. Unter Windows Vista und 7 macht uns aber die Nutzerverwaltung einen Strich durch die Rechnung. - Dies bedeuted, wir müssen das Ereignisprotokoll mit Adminrechten erstellen lassen.
Am besten eignet es sich daher, das Ereignisprotokoll im Setup der Anwendung zu erstellen.
Erstellen einer eigenen LogEngine
Zur Erstellung einer eigenen LogEngine z.B. zum Loggen in die Datenbank, muss von dem Interface ILogEngine abgeleitet werden, welche in der Assembly PS.Utilities.Logging zu finden ist. Das Interface gibt das Grundgerüst für eine LogEngine vor.
public interface ILogEngine : IDisposable
{
LoggerConfiguration Configuration
{
get;
set;
}
void WriteLog(string message, Exception exc, LogEntryType logEntryType);
LogEntry[] GetLogEntries();
void Dispose();
}
Zur Definition einer spezifischen Konfigurationsklasse für die benutzerdefinierte LogEngine ist von der Klasse LoggerConfiguration abzuleiten.
Die Konfigurationsdatei muss nicht eigenständig ausgelesen werden, dies übernimmt der EventLogManager automatisch bei der Initialisierung.
Für den Zugriff auf die Konfigurationswerte ist jedoch die Instanz der LoggerConfiguration in den selbst definierten Typen zu casten. Hierfür bietet sich eventuell eine zusätzliche Property wie folgt an:
// TypedConfiguration ist durch den Typen der Konfiguration zu ersetzen
private TypedConfiguration
{
get { return this.Configuration as TypedConfiguration; }
}
Schlagwörter: EventLog, Ereignisprotokollierung, Fehler loggen, Logeinträge schreiben
Version 1.0 habe ich direkt hier angehängt.
Wissen ist nicht alles. Man muss es auch anwenden können.
PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |
Mir fiel gerade selbst ein Fehler beim loggen in eine Xml Datei auf.
Aktuell deserialisiere ich die Logeinträge im Konstruktor, was so nicht sein darf. - Denn an der Stelle ist die Datei noch nicht bekannt.
Ich werde schauen, dass ich den schnellst möglich behebe. - Außerdem werde ich eine Methode hinzufügen, die es ermöglicht selbst die Logeinträge abzurufen, um nicht gezwungen zu sein das interne Formular zu verwenden.
Und auch das interne Formular werde ich überarbeiten. - Ich denke mal bis spätestens Sonntag sollte der Fehler behoben sein und die neue Version verfügbar.
Wissen ist nicht alles. Man muss es auch anwenden können.
PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |
Wie versprochen nun das Update des EventLogManagers.
Neu hinzugekommen ist wie bereits angekündigt die Methode zum abrufen der LogEntries ohne den internen Dialog zu öffnen.
Dazu wurde die Methode "GetLogEntries" hinzugefügt, welche die Logeinträge als Array zurück liefert.
[EDIT]Screenshot des angepassten EventLogViewers entfernt, da in der aktuellen Version nicht mehr enthalten.[/EDIT]
Wissen ist nicht alles. Man muss es auch anwenden können.
PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |
Ich habe den EventLogManager mal wieder etwas angepasst. Zu den wichtigsten Neuerungen zählt, das es nun möglich ist eigene LogEngines hinzuzufügen.
An der Grundlegenden Verwendung des EventLogManagers hat sich nach außen nichts verändert. Die Aktuelle Version steht im Startbeitrag zum Download. Hinweise zur Erstellung eigener LogEngines finden sich ebenfalls im Startbeitrag.
Wissen ist nicht alles. Man muss es auch anwenden können.
PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |