eZ Publish 5: Eigene Log Datei definieren

Während der Programmierung und Umsetzung eines Moduls aber auch bei automatisierten Prozessen, wie einem Newsletterversand, ist es oft notwendig, die Abläufe persistent festzuhalten, um sie später analysieren und nachvollziehen zu können. eZ Publish 4 Entwickler sind in der Hinsicht ziemlich verwöhnt, da das CMS eine sehr elegante und flexible Lösung zum Schreiben von Log Dateien mitbringt.

Logging mit eZ Publish 4

eZ Publish 4 hat einen eingebauten Log Mechanismus, der es einem Entwickler relativ einfach macht, seinen Code zu debuggen. Ohne jegliche Vorkonfiguration ist es möglich, die statische Methode write() der eZ Publish Klasse eZLog() aufzurufen und mit den entsprechenden Parametern in eine eigene Log Datei zu schreiben.

eZLog::write('Das ist meine Nachricht.', 'custom.log');

Der Aufruf oben würde eine Log Datei namens custom.log im Ordner /var/log im Root Verzeichnis erstellen, falls sie noch nicht existiert, und dort den Text ‚Das ist meine Nachricht‘ schreiben. Weiterhin hat man die Möglichkeit durch die Übergabe eines dritten Parameters, die Log Datei nicht im Standard eZ Publish Log Ordner zu erstellen, sondern in einem beliebigen anderen Ordner.

Bei der Programmierung hat man durch diese Funktion also die Möglichkeit seine Logs logisch zu gliedern, um die gewünschten Nachrichten schnell wieder finden zu können.

eZ Publish 5 und Symfony2

Bei eZ Publish 5 ist diese Funktionalität weggefallen. Wenn man also loggen möchten und sich nicht dem Legacy Modul bedienen will, dann muss man auf das Symfony2 Stack zurückgreifen. Das ist aber eher ein Vorteil als ein Nachteil gegenüber eZ Publish 4, da man hier mit einem mächtigen und gut konfigurierbaren Tool arbeiten darf.

Bevor man jedoch starten kann, ist ein wenig Konfigurationsarbeit notwendig. Zunächst muss der Custom Logger als Service definiert werden, der dann überall im System initialisierbar ist. Das macht man am besten in der YAML Datei config/services.yml in seinem eigenen Bundle.

services:
    custom.log.handler:
        class: %monolog.handler.stream.class%
        arguments: [ %kernel.root_dir%/logs/custom.log ]
    custom.logger:
        class: %monolog.logger.class%
        arguments: [ portal ]
        calls: [ [pushHandler, [@custom.log.handler]] ]

Hier wurde also custom.logger als Service angemeldet. Im ersten Block der YAML Konfiguration wird dem Logger die entsprechende Datei zugewiesen. Das ist in dem Fall /logs/custom.log im Root Verzeichnis.

Der Logger kann nun überall innerhalb Symfony Umgebung aufgerufen werden und zwar folgendermaßen:

$logger = $container->get('custom.logger');
$logger->info('Das ist meine Nachricht');

Wenn Ihr im Produktiv Modus arbeitet, dann muss nach einer Änderung an einer YAML Datei immer der Cache geleert werden. Erst dann ist der Service registriert.