Quickstart

Instantiate a logger for the current class

Constructor injection can be used to automatically instantiate the logger:

use Psr\Log\LoggerInterface;

class MyClass {
    private LoggerInterface $logger;

    public function __construct(LoggerInterface $logger) {
        $this->logger = $logger;
    }
}

Log

Log a simple message:

EXT:some_extension/Classes/SomeClass.php
$this->logger->warning('Something went awry, check your configuration!');

Provide additional context information with the log message:

EXT:some_extension/Classes/SomeClass.php
$this->logger->error('Passing {value} was unwise.', [
    'value' => $value,
    'other_data' => $foo,
]);

Values in the message string that should vary based on the error (such as specifying what an invalid value was) should use placeholders, denoted by { }. Provide the value for that placeholder in the context array.

$this->logger->warning() etc. are only shorthands - you can also call $this->logger->log() directly and pass the severity level:

EXT:some_extension/Classes/SomeClass.php
$this->logger->log(
   \TYPO3\CMS\Core\Log\LogLevel::CRITICAL,
   'This is an utter failure!'
);

Set logging output

TYPO3 has the FileWriter enabled by default for warnings (LogLevel::WARNING) and lower, so all matching log entries are written to a file.

If the filename is not set, then the file will contain a hash like

var/log/typo3_<hash>.log, for example var/log/typo3_7ac500bce5.log.

A sample output looks like this:

Fri, 08 Mar 2013 09:45:00 +0100 [WARNING] request="5139a50bee3a1" component="TYPO3.Examples.Controller.DefaultController": Something went awry, check your configuration!
Fri, 08 Mar 2013 09:45:00 +0100 [ERROR] request="5139a50bee3a1" component="TYPO3.Examples.Controller.DefaultController": This was not a good idea - {"foo":"bar","bar":{}}
Fri, 08 Mar 2013 09:45:00 +0100 [CRITICAL] request="5139a50bee3a1" component="TYPO3.Examples.Controller.DefaultController": This is an utter failure!