---
title: "Quickstart: writing to the logger from PHP"
manual: "TYPO3 Explained"
version: "main"
permalink: "https://docs.typo3.org/permalink/t3coreapi:logging-quickstart@main"
source: "ApiOverview/Logging/Quickstart/Index.rst"
modified: "2026-09-16T07:40:42+00:00"
---

# Quickstart: writing to the logger from PHP

## Instantiate a logger for the current class

[Constructor injection](https://docs.typo3.org/permalink/t3coreapi:constructor-injection@main) can be used to
automatically instantiate the logger:

**EXT:my_extension/Classes/MyClass.php**

```php
<?php

declare(strict_types=1);

namespace MyVendor\MyExtension;

use Psr\Log\LoggerInterface;

class MyClass
{
  public function __construct(
    private readonly LoggerInterface $logger,
  ) {}
}

```

## Log

Log a simple message (in this example with the log level "warning"):

**EXT:my_extension/Classes/MyClass.php**

```php
$this->logger->warning('Something went awry, check your configuration!');
```

Provide additional context information with the log message (in this example
with the log level "error"):

**EXT:my_extension/Classes/MyClass.php**

```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 an invalid value) 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:my_extension/Classes/MyClass.php**

```php
// use Psr\Log\LogLevel;

$this->logger->log(LogLevel::CRITICAL, 'This is an utter failure!');
```

## Set logging output

TYPO3 has the [FileWriter](https://docs.typo3.org/permalink/t3coreapi:logging-writers-filewriter@main) enabled by default
for warnings (`LogLevel::WARNING`) and higher severity, so all matching log
entries are written to a file.

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

**Composer-based installation**

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

**Classic mode installation (No Composer)**

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

A sample output looks like this:

```none
Fri, 19 Jul 2023 09:45:00 +0100 [WARNING] request="5139a50bee3a1" component="TYPO3.Examples.Controller.DefaultController": Something went awry, check your configuration!
Fri, 19 Jul 2023 09:45:00 +0100 [ERROR] request="5139a50bee3a1" component="TYPO3.Examples.Controller.DefaultController": Passing someValue was unwise. - {"value":"someValue","other_data":{}}
Fri, 19 Jul 2023 09:45:00 +0100 [CRITICAL] request="5139a50bee3a1" component="TYPO3.Examples.Controller.DefaultController": This is an utter failure!
```
