AdvancedLogger

Bitte beachten Sie, dass der AdvancedLogger seit 1.17 als veraltet gekennzeichnet ist. Benutzen Sie ab Release 1.17 daher bitte den Logger mit einer entsprechenden LogWriter-Implementierung.

Da der Framework enthaltene Logger in seinen Konfigurationsmöglichkeiten eingeschränkt ist, wurde mit der 1.8er Serie ein erweiterter Logger eingeführt. Dieser kann unterschiedliche Ausgabe-Formen (Datei, Datenbank, Standard-Out) bedienen und unterstützt unterschiedliche Log-Formate.

1. Konfiguration

Zur Verwendung des Loggers muss dieser zunächst konfiguriert werden. Hierzu erwartet die Komponente die Konfigurationsdatei
Code
/config/core/logging/{CONTEXT}/{ENVIRONMENT}_logconfig.ini
Jede Sektion der Konfigurationsdatei beinhaltet die Definition für eine konkrete Instanz des AdvancedLoggers.


1.1. Datei-Logging

Im Falle der Ausgabe in eine Log-Datei sind folgende Parameter in der entsprechenden Sektion vorzuhalten:
APF-Konfiguration
[FileLogger] LogTarget = "file" LogDir = "/path/to/log/dir" LogFileName = "log_file_name" LogType = "true|false" LogTimestamp = "true|false"
Das LogTarget definiert, dass die Ausgabe des Loggers in eine Datei umgeleitet werden soll. In den Direktiven LogDir und LogFileName wird der Pfad und der Name der Log-Datei definiert. Hierbei ist zu beachten, dass das Verzeichnis bereits angelegt sein muss. Ist LogType mit true belegt, so wird in der Log-Datei der Typ der Meldung (severity) angezeigt, der Parameter LogTimestamp entscheidet in gleicher Weise über die Anzeige eines Timestamps.


1.2. Datenbank-Logging

Im Falle der Ausgabe in eine Datenbank sind folgende Parameter relevant:
APF-Konfiguration
[DatabaseLogger] LogTarget = "database" LogDatabase = "connection_key" LogTable = "log_table_name"
Das LogTarget definiert, dass die Ausgabe des Loggers in eine Datenbank umgeleitet werden soll. In den Direktiven LogDatabase und LogTable wird dabei das Ziel der Umleitung beschrieben. LogDatabase ist dabei eine Referenz auf die Datenbank-Verbindungskonfiguration (siehe ConnectionManager für weitere Details), LogTable enthält den Namen der Log-Tabelle. Um den Logger betreiben zu können, muss in der konfigurierten Datenbank die benannte Tabelle mit folgendem Statement angelegt werden:
SQL-Statement
CREATE TABLE IF NOT EXISTS `<log_table_name>` ( `<primary_key_name>` int(5) NOT NULL auto_increment, `Timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP, `Type` varchar(100) NOT NULL default '', `Message` text NOT NULL, PRIMARY KEY (`<primary_key_name>`) );

1.3. Stdout-Logging

Um den Logger zur Ausgabe nach Stdout zu konfigurieren, ist folgender Eintrag in der Konfigurationsdatei notwendig:
APF-Konfiguration
[StdoutLogger] LogTarget = "stdout" LogType = "true|false" LogTimestamp = "true|false"
LogTarget definiert dabei die Ausgabe der Log-Informationen auf die Standard-Ausgabe (in der Regel per HTTP zum Client). Ist LogType mit true belegt, so wird in der Log-Datei der Typ der Meldung (severity) angezeigt, der Parameter LogTimestamp entscheidet in gleicher Weise über die Anzeige eines Timestamps.


2. Anwendung

Um mehrere singleton Logger pro Request zu erlauben muss ein konkreter AdvancedLogger immer mit Hilfe der AdvancedLoggerFactory bezogen werden, die das Erstellen und verwalten eines AdvancedLoggers vornimmt.

Im konkreten Anwendungsbeispiel sollen innerhalb einer Applikation mehrere Typen von Loggern zum Einsatz kommen. Dazu wurde folgende Konfigurationsdatei angelegt:
APF-Konfiguration
[FileLogger] LogTarget = "file" LogDir = "/path/to/my/advanced/logger/log/dir" LogFileName = "special_log" LogType = "false" LogTimestamp = "true" [StdoutLogger] LogTarget = "stdout" LogType = "false" LogTimestamp = "false" [DatabaseLogger] LogTarget = "database" LogDatabase = "AdvancedLogger" LogTable = "log"
Innerhalb einer Applikation können die damit konfigurierten Logger wie folgt verwendet werden:
PHP-Code
// get logger factory $logFactory = &$this->getServiceObject('core::logging','AdvancedLoggerFactory'); // create file logger and append message $log1 = &$logFactory->getAdvancedLogger('FileLogger'); $log1->logEntry('user typed studpid things into the given text area!'); // create stdout logger and append message $log2 = &$logFactory->getAdvancedLogger('StdoutLogger'); $log2->logEntry('the remote server didn\'t answer within the timout!'); // create database logger and append message $log3 = &$logFactory->getAdvancedLogger('DatabaseLogger'); $log3->logEntry('current application is doing nonsense!');

Kommentare

Möchten Sie den Artikel eine Anmerkung hinzufügen, oder haben Sie ergänzende Hinweise? Dann können Sie diese hier einfügen. Die bereits verfassten Anmerkungen und Kommentare finden Sie in der untenstehenden Liste.
Für diesen Artikel liegen aktuell keine Kommentare vor.