Für PHP existieren verschiedene Logging Frameworks. Vom eher einfachen kLogger über Zend_Log, welches in das bekannte Zend Framework inkludiert ist, bis zu Apache log4php. In diesem Beitrag möchte ich den Apache log4php kurz vorstellen.
Kleiner Projektsteckbrief:
Entwicklung:
Apache log4php ist ein Teilprojekt vom Apache Logging Services Projects, welches für die Entwicklung und Betreuung zahlreicher bekannter Logging Frameworks wie etwa log4j oder log4net zuständig ist.
Features:
- Konfiguration durch XML-, Properties- oder PHP-Dateien
- Zahlreiche Möglichkeiten der Log-Ausgabe
- Konsole (stdout, stderr)
- Dateien
- Datenbank
- Sockets
- Syslog
- Verschiedene Formate der Log-Ausgabe
- HTML
- XML
- Benutzerdefiniertes Pattern
Aktuelle Version:
2.3.0 – Release Datum: 13.10.2012.
Source:
Github read-only Mirror:
https://github.com/apache/logging-log4php
Verwendung:
Der Logger wird entweder ĂĽber eine XML-, PHP- oder Property-Datei konfiguriert.
Bsp: XML Konfiguration ĂĽber config.xml
<configuration xmlns="https://logging.apache.org/log4php/"> <appender name="myFileAppender" class="LoggerAppenderFile"> <layout class="LoggerLayoutPattern"> <param name="conversionPattern" value="%date [%logger] %message%newline" /> </layout> <param name="file" value="myLog.log" /> </appender> <logger name="Test"> <appender_ref ref="myFileAppender" /> </logger> </configuration>
Erklärung:
appender: Ăśber das Attribut class wird die Art der Logausgabe definiert. Im Beispiel wird das Log in eine Datei geschrieben.
apender -> layout: Über Placeholder wird der Aufbau einer Logzeile bestimmt. 29/03/13 19:40:39,545 [5428] INFO Test – Testausgabe.
apender -> param: Name der Log-Datei
logger: Name des Loggers, wird bei der Initialisierung des Loggers in den PHP Klassen benötigt
logger -> appender_ref: Zuordnung zu appender
Es können auch mehrere appender und Logger gleichzeitig definiert werden. In der folgenden Konfiguration wird eine Log-Datei geschrieben und per E-Mail werden Log-Ausgaben versendet:
<configuration xmlns="https://logging.apache.org/log4php/"> <appender name="myFileAppender" class="LoggerAppenderFile"> <layout class="LoggerLayoutPattern"> <param name="conversionPattern" value="%date [%logger] %message%newline" /> </layout> <param name="file" value="myLog.log" /> </appender> <logger name="Test"> <appender_ref ref="myFileAppender" /> </logger> <appender name="myMailAppender" class="LoggerAppenderMail"> <layout class="LoggerLayoutSimple" /> <param name="to" value="test@example.com" /> <param name="from" value="logger@example.com" /> </appender> <root> <appender_ref ref="myMailAppendert" /> </root> </configuration>
Zahlreiche weitere Appender, wie beispielsweise LoggerAppenderConsole oder LoggerAppenderDailyFile, sind verfĂĽgbar.
Einbindung definierter Logger in PHP Klassen:
// Einbindung des Logger-Frameworks include('log4php/Logger.php'); //Einbindung des Konfigurationsfiles Logger::configure('config.xml'); /** * Testklasse. */ class Test { private $log; /** Konstruktor */ public function __construct() { // __CLASS__ : Konstante, welche den Namen der aktuellen Klasse liefert -> im Bsp. "Test" // Instanziierung eines Loggers mit Namen "Test" -> in der Konfiguration wird // nun über <logger name="Test"> der zugehörige appender bestimmt $this->log = Logger::getLogger(__CLASS__); } /** Beliebige PHP Methode*/ public function testMethod() { // Als Loglevel stehen fatal, error, warn, info, debug und trace zur Verfügung $this->log->info("Testausgabe."); } } </logger>
Logausgabe in myLog.log:
29/03/13 19:40:39,545 [5428] INFO Test - Testausgabe.
Fazit:
Mit Apache log4php sind vielfältige Loggingausgaben möglich. Die Einbindung und Konfiguration gestaltet sich einfach und gleichzeitig äußerst flexibel. Durch die Apache Foundation als Projektinhaber ist auch die Zukunftsfähigkeit gegeben.