For coders TYPO3 Tech Corner

[PHP] Eigenes Logging in TYPO3 einbauen

[PHP] Eigenes Logging in TYPO3 einbauen

In die ext_localconf.php eurer Extension kommt folgendes Schnippselchen, dass die Writer-Configuration für alle Klassen unterhalb im Controller-Namespace der Extension Package auf den FileWriter (in diesem Beispiel wollen wir ein eine Datei loggen) umstellt. Daraufhin wird dann eine Datei VendorPackageController.log unterhalb von var/log erstellt:

$GLOBALS['TYPO3_CONF_VARS']['LOG']['Vendor']['Package']['Controller']['writerConfiguration'] = [ \TYPO3\CMS\Core\Log\LogLevel::INFO => [ \TYPO3\CMS\Core\Log\Writer\FileWriter::class => [ 'logFile' => \TYPO3\CMS\Core\Core\Environment::getVarPath() . '/log/VendorPackageController.log' ] ] ];

Das Ganze kannst man dann noch so granular erstellen, dass man die Konfiguration explizit für den Controller MyFirstController anpasst:

$GLOBALS['TYPO3_CONF_VARS']['LOG']['Vendor']['Package']['Controller']['MyFirstController']['writerConfiguration'] = [...];

Im Controller selber implementiert man das LoggerAwareInterface und kann dann loggen bis der Arzt kommt:

<?php declare(strict_types=1); namespace Vendor\Package\Controller; use Psr\Log\LoggerAwareInterface; use Psr\Log\LoggerAwareTrait; use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; class MyFirstController extends ActionController implements LoggerAwareInterface { use LoggerAwareTrait; public function __construct() { $this->logger = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Log\LogManager::class)->getLogger(__CLASS__); } public function myControllerAction() { $this->logger->error('Hier wird was weggelogged!'); } }

Tipp: In TYPO3 11 geht das Ganze sogar noch schicker und ohne Interface (siehe offizielle Dokumentation für TYPO3 11 und für TYPO3 10)

Zurück

Kennst du das: Immer nur schnell schnell?

Wie wäre es einmal mit Zeit und Respekt für Codequalität? Arbeiten im Team? Automatisierte Tests?

Komm zu uns