Logbuch und Fehlersuche¶
Für die Fehlersuche steht mit der Logger-Klasse ein Werkzeug für die Systemanalyse bereit. Die Logger-Klasse ist dabei so konzipiert, das Sie nicht zu schwerfällig ist (siehe Log4j), aber trotzdem eine gute und erweiterbare Funktionalität bereitstellt.
Loglevel¶
Der Loglevel in der Konfiguration gibt an welche Meldungen von dem Handler verarbeitet werden. Der Loglevel ist ein Filter der in der Reihenfolge ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF ausgewertet wird.
Typ | Beschreibung | |
---|---|---|
ALL | Es werden alle Log-Nachrichten die vom Logger an den Handler gesendet werden vom Handler verarbeitet. | |
TRACE | Es werden alle Meldungen die mit Logger::logTrace(), Logger::logDebug(), Logger::logInfo(), Logger::logWarn(), Logger::logError() und Logger::logFatal() geschrieben wurden vom Handlerverarbeitet. | |
DEBUG | Es werden alle Meldungen die mit Logger::logDebug(), Logger::logInfo(), Logger::logWarn(), Logger::logError() und Logger::logFatal() geschrieben wurden vom Handler verarbeitet. | |
INFO | Es werden alle Meldungen die mit Logger::logInfo(), Logger::logWarn(), Logger::logError() und Logger::logFatal() geschrieben wurden vom Handler verarbeitet. | |
WARN | Es werden alle Meldungen die mit Logger::logWarn(), Logger::logError() und Logger::logFatal() geschrieben wurden vom Handler verarbeitet. | |
ERROR | Es werden alle Meldungen die mit Logger::logError() und Logger::logFatal() geschrieben wurden vom Handler verarbeitet. | |
FATAL | Es werden nur Meldungen die mit Logger::logFatal() geschrieben wurden vom Handler verarbeitet. | |
OFF | Es werden keine Logeinträge verarbeitet. |
Logfunktionen und Auswirkung¶
Mit Hilfe der folgenden Logfunktionen können die Logeinträge im jeweiligen Level geschrieben werden.
Methode | Einsatzgebiet | Zustand der Anwendung | Aktion |
---|---|---|---|
logTrace() | Loggen einzelner Schritte im Programmablauf. | Fehlersuche | Tiefgreifendes Debugging des Entwicklers |
logDebug() | Loggen von Daten an wichtigen Stellen im Code, die zum Debuggen von Fehlern hergenommen werden können | Fehlersuche | Debugging des Entwicklers oder Administrators |
logInfo() | Informationen für den Administrator zum Verhalten der Anwendung | Normal | Keine |
logWarn() | Warnungen über mögliche Fehler in der Anwendung | Die Funktionsweise ist noch nicht eingeschränkt, aber es kann zu nicht gewollten Ergebnissen kommen. | Überprüfen der Warnung und nach Möglichkeit Feinjustierung der Konfiguration |
logError() | Fehler in der Anwendung | Die Funktionsweise der Anwendung ist stark eingeschränkt. | Identifizierung des Fehlers und Beseitigung der Fehlerquelle veranlassen |
logFatal() | Fehler die ein kritisches Verhalten der Anwendung herbeiführen | Die Anwendung oder wichtige Funktionen funktionieren nicht | Sofortige Maßnahmen einleiten |
Standard Logger¶
Es gibt verschiedene Standard-Logger, die für bestimmte Aufgaben bestimmt sind.
Name | Beschreibung | Beispiel |
---|---|---|
application | Logeinträge der Anwendung (Verwendung direkt in der Anwednungsklasse) | |
database | Logeinträge im Zusammenhang mit Datenbanken | Fehler bei MySQL-Select |
default | Standardlogger (keine Verwendung im Framework) | |
framework | Meldungen des Alvine-Frameworks, sollten nicht von Anwendungen und Komponenten verwendet werden | |
http | Spezielle Netzwerklogging für das HTTP-Protokoll | Die HttpClient Klasse loggt hier jeden Request im TRACE Level |
io | Input/Output Logging: Alle Dateifunktionen | Fehler bei in den IO-Klassen |
networking | Logeinträge die das Networking betreffen | Übertragene Daten des Sockets |
presenter | Logeinträge die in einer Presenter-Klasse geschrieben werden | |
routing | Logeinträge im Zusammenhang mit dem Routing | Logging der Router-Klasse |
Logbuch¶
Das Logging kann über eine Konfigurationsdatei gesteuert werden. Je nach gewünschtem Ausgabeumfang kann der entsprechende Filter gesetzt werden. Die Reihenfolge der Filterung stellt sich dabei wie folgt dar: ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF
Beispielcode für das Erstellen eines Loggers.
// Neue Handler für die Ausgabe in eine Datei erstellen.
$handler = new \Alvine\Util\Logging\Handler\File('alvine.log');
// Neuer Logger
$logger = \Alvine\Util\Logging\Logger::getLogger();
// Als Ausgabe soll eine einfache tab-getrennte Liste
// erstellt werden
$formatter = new \Alvine\Util\Logging\Formatter\Plain();
// Zuweisung des handlers und des Formatters
$logger->addHandler($handler);
$handler->setFormatter($formatter);
// Über den Schwellwert kann gesteuert werden,
// welche Meldungen ausgegeben werden sollen.
// In diesem Fall sollen nur Infomeldungen, Warnings,
// Errors und Fatals protokolliert werden.
$handler->setThreshold(\Alvine\Util\Logging\Level::INFO);
// Meldungen mit unterschiedlichen Level
// ausgeben.
$logger->logTrace('Log-Trace');
$logger->logDebug('Log-Debug');
$logger->logInfo('Log-Info');
$logger->logWarn('Log-Warn');
$logger->logError('Log-Error');
$logger->logFatal('Log-Fatal');
// Ergebnis -> 2017-01-02 09:58:22 INFO Log-Info
// 2017-01-02 09:58:22 WARN Log-Warn
// 2017-01-02 09:58:22 ERROR Log-Error
// 2017-01-02 09:58:22 FATAL Log-Fatal
Handler¶
Memory¶
Will man die Logdaten direkt ausgeben (zum Beispiel bei der Entwicklung) kann der MemoryHandler zum Einsatz kommen. Dieser erlaubt es die Lognachrichten als Zeichenkette auszugeben.
// Handler
$handler = new \Alvine\Util\Logging\Handler\Memory();
// Logger
$logger = \Alvine\Util\Logging\Logger::getInstance();
$logger->addHandler($handler);
$handler->setThreshold(\Alvine\Util\Logging\Level::ALL);
/** do something */
$logger->logTrace('Dies ist ein Log-Trace');
$logger->logDebug(' und eine Log-Debug Zeile!');
// Ausgabe der Logdaten
echo $handler->getBuffer();
// Ergebnis -> Dies ist ein Log-Trace und eine Log-Debug Zeile!
Chrome Logger¶
Der ChromeHandler arbeitet mit der Chrome-Erweiterung Chrome Logger zusammen. Die Chrome-Erweiterung kann über den Chrome-Store oder diesen Link installiert werden. Für einen ersten Test kann man folgenden Beispielcode verwenden.
// ChromeHandler
$handler = new \Alvine\Util\Logging\Handler\Chrome();
// Logger
$logger = \Alvine\Util\Logging\Logger::getLogger();
$logger->addHandler($handler);
// Meldungen mit unterschiedlichen Level
// ausgeben.
$logger->logTrace('Dies ist ein Log-Trace');
$logger->logDebug('Und eine Log-Debug Zeile!');
ElasticSearch¶
Kibana und Elasticsearch sind ein tolles Gespann für die Auswertung von Lagdateien. Alvine bietet die Möglichkeit direkt nach ElasticSearch zu loggen. dazu muss nur ein Handler
// Handler
$uri = new \Alvine\Net\Resource\URI('http://www.example.com/');
$handler = new \Alvine\Util\Logging\Handler\ElasticSearch($uri, '/alvine-logs/entry/');
// Logger
$logger = \Alvine\Util\Logging\Logger::getLogger();
$logger->addHandler($handler);
// Meldungen mit unterschiedlichen Level
// ausgeben.
$logger->logTrace('Dies ist ein Log-Trace');
$logger->logDebug('Und eine Log-Debug Zeile!');
Loggr.com¶
Der Dienst loggr.net bietet eine zentrale Stelle, für die Verarbeitung von Lognachrichten. Das Alvine Framework bietet mit der LoggrHandler-Klasse die einfache Möglichkeit Lognachrichten direkt zu loggr zu senden. Dazu muss lediglich ein Handler mit dem entsprechenden API-Schlüssel und dem LogSchlüssel übergeben werden.
// LoggrHandler
$apiKey='GEHEIM';
$logKey='SECRET';
$handler = new \Alvine\Util\Logging\Handler\Loggr($apiKey, $logKey);
// Logger
$logger = \Alvine\Util\Logging\Logger::getLogger();
$logger->addHandler($handler);
// Meldungen mit unterschiedlichen Level
// ausgeben.
$logger->logTrace('Dies ist ein Log-Trace');
$logger->logDebug('Und eine Log-Debug Zeile!');