Bild-Schulung-Solr-in-a-Nutshell

PHP Logging mit Apache log4php

Daniel Wrigley

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
    • E-Mail
    • 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.

Weiterführende Links: