---
title: "Breaking: #110221 - Class Logger declared final"
manual: "TYPO3 Core Changelog"
version: "main"
permalink: "https://docs.typo3.org/permalink/changelog:breaking-110221-1784306185"
source: "Changelog/15.0/Breaking-110221-LoggerDeclaredFinal.rst"
typo3-version: "15.0"
typo3-major: 15
type: "breaking"
issue: 110221
forge: "https://forge.typo3.org/issues/110221"
tags: ["PHP-API", "NotScanned", "ext:core"]
rendered: "2026-10-07T18:53:34+00:00"
---

# Breaking: #110221 - Class Logger declared final {#breaking-110221-1784306185}

See [forge#110221](https://forge.typo3.org/issues/110221)

## Description {#description}

The PHP class `\TYPO3\CMS\Core\Log\Logger` has been declared
`final` and is now instantiated directly via `new` within
`\TYPO3\CMS\Core\Log\LogManager`, instead of using
`\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance()`.

The logger is a plain, per-channel object created and configured by the
`\TYPO3\CMS\Core\Log\LogManager`. Routing its creation through `makeInstance()` only
served to allow overriding the class via XCLASS, which is not a supported
extension point for the logging API.

## Impact {#impact}

Extending or XCLASSing `\TYPO3\CMS\Core\Log\Logger` is not possible anymore. Extension
classes will raise a fatal PHP error, XCLASS configurations for this class
are silently ignored.

Obtaining and using loggers via dependency injection, the `#[Channel]`
attribute, `\Psr\Log\LoggerAwareInterface` or
`\TYPO3\CMS\Core\Log\LogManager->getLogger()` continues to work as before.

## Affected installations {#affected-installations}

TYPO3 installations with third-party extensions that extend or XCLASS the
class `\TYPO3\CMS\Core\Log\Logger`, which is very unlikely.

## Migration {#migration}

To customize logging behavior, implement the PSR-3
`\Psr\Log\LoggerInterface` and provide the instances through a custom
`\TYPO3\CMS\Core\Log\LogManagerInterface` implementation, or attach
custom log writers (`\TYPO3\CMS\Core\Log\Writer\WriterInterface`) and
processors (`\TYPO3\CMS\Core\Log\Processor\ProcessorInterface`) to the
existing logger, which is the designated way to influence how log records
are handled.
