15.3 Weitere Möglichkeiten mit EventLog 

Auf einige der Möglichkeiten wie das EventLogDatabaseTiein, welche die EventLog-Komponente bietet, ist in den in die Applikation eingebetteten Beispielen nicht eingegangen worden.
15.3.1 Loggen in der Datenbank 

Neben dem eigenen Log-Writer für ein eigenes Tabellenschema existiert im EventLogDatabaseTiein ein genereller Log-Writer, der einfach in den existierenden Logging-Mechanismus integriert werden kann.
Die Datenbanktabelle muss dabei zumindest Spalten für die aus den vorigen Abschnitten bekannten Eigenschaften von Log-Nachrichten enthalten:
- time
- message
- severity
- source
- category
Weitere Spalten sind notwendig, wenn noch eigene Optionen an die Log-Nachrichten angehängt werden, wie beispielsweise die IP-Adresse im Beispiel der protokollierten Fehler in Abschnitt 15.2.3, »Zusätzliche Daten loggen«.
$log = ezcLog::getInstance(); // Create a database writer attached to the database handler and // the table "log" $writer = new ezcLogDatabaseWriter( ezcDbInstance::get(), 'log' ); // Specify that log messages will be written to the database $log->getMapper()->appendRule( new ezcLogFilterRule( new ezcLogFilter, $writer, true ) ); // Write a log entry ( message, severity, source, category ) $log->log( "Some random warning.", ezcLog::WARNING, array( "source" => "Application", "category" => "Design" ) );
Listing 15.11 Verwendung von ezcLogDatabaseWriter
Erzeugt wird ein Objekt der Klasse ezcLogDatabaseWriter mit einer aktiven Instanz der ezcDbHandler, wie sie in Kapitel 6, »Datenbankanbindung«, vorgestellt wurde, und dem Namen der Tabelle, in die die Log-Nachricht geschrieben werden soll. Nachdem das $writer-Objekt unter der üblichen und zuvor beschriebenen Angabe von Filtern dem ezcLogMapper hinzugefügt wurde, werden die spezifizierten Klassen von Nachrichten in die Tabelle geschrieben.
15.3.2 Lazy-Initialization 

Die in Abschnitt 2.3.4, »Lazy-Initialization«, vorgestellte Lazy-Initialization ist auch mit der EventLog-Komponente verwendbar. Dazu muss eine Klasse das ezcBaseConfigurationInitializer-Interface implementieren und kann dann in der Methode configureObject(), die eine Instanz von ezcLog übergeben bekommt, die Logging-Abbildungen definieren. Dies funktioniert entsprechend dem zuvor gezeigtem Code in der Methode gpBlogController::init().
Der Vorteil von Lazy-Initialization ist, dass die EventLog-Komponente erst mit der ersten Log-Nachricht initialisiert wird. Und falls die Applikation ohne Logging auskommt, wird sie sogar überhaupt nicht initialisiert. Das spart eventuell Speicher und Ausführungszeit, besonders beim Loggen von Fehlern und kritischen Operationen, die eine Ausnahme während der Ausführung der Applikation darstellen sollten.




Ihre Meinung






