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)