Fehler-Monitoring für TYPO3.

Mit der Extension networkteam/sentry-client meldet TYPO3 jede Ausnahme an Fehlo, statt sie nur ins Log zu schreiben. Du brauchst ein Composer-Paket und drei Zeilen Konfiguration.

Stand: 24.10.2026, Extension networkteam/sentry-client 6.0.0 (Extension-Key sentry_client), TYPO3 12 bis 14, PHP ab 8.1. Das PHP-SDK haben wir noch nicht selbst gegen Fehlo laufen lassen; es spricht dasselbe Protokoll wie die getesteten SDKs.

Die Extension von networkteam ist mit Abstand die meistgenutzte Sentry-Anbindung für TYPO3. Sie ersetzt TYPO3s Exception-Handler und meldet jede Ausnahme, die bis zu TYPO3 durchschlägt. Ab Version 5 gibt es sie nur noch über Composer; die Version im TER wird nicht mehr gepflegt.

1. Extension installieren

Terminal
composer require networkteam/sentry-client

2. Exception-Handler und DSN

In config/system/additional.php (im Classic-Modus typo3conf/system/additional.php):

config/system/additional.php
<?php

$GLOBALS['TYPO3_CONF_VARS']['SYS']['productionExceptionHandler'] = \Networkteam\SentryClient\ProductionExceptionHandler::class;
$GLOBALS['TYPO3_CONF_VARS']['SYS']['debugExceptionHandler'] = \Networkteam\SentryClient\DebugExceptionHandler::class;

$GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS']['sentry_client']['dsn'] = 'https://<key>@app.fehlo.de/<project-id>';
$GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS']['sentry_client']['reportUserInformation'] = 'none';

Der DSN kann auch aus der Umgebung kommen; eine Umgebungsvariable SENTRY_DSN hat Vorrang vor der Einstellung. Release und Umgebung liest die Extension aus SENTRY_RELEASE und SENTRY_ENVIRONMENT, sonst aus dem Application Context von TYPO3.

.env oder Server-Umgebung
SENTRY_DSN=https://<key>@app.fehlo.de/<project-id>
SENTRY_ENVIRONMENT=Production
SENTRY_RELEASE=1.0.0

Den DSN kannst du auch unter Admin Tools, Settings, Extension Configuration eintragen oder mit vendor/bin/typo3 configuration:set EXTENSIONS/sentry_client/dsn '...'.

3. Testen

Die Extension liefert dafür eine kleine TypoScript-Zeile. Häng sie an das Setup einer Testseite und ruf die Seite auf:

TypoScript-Setup
page.20 = USER
page.20 {
  userFunc = Networkteam\SentryClient\Client->captureException
}

Laut Dokumentation der Extension löst das einen Fehler aus, der gemeldet wird. Die Fehlerseite zeigt die Ereignis-ID, unter der du den Fehler in Fehlo findest. Entfern die Zeile danach wieder.

Log-Einträge zusätzlich melden

Manche Fehler fängt TYPO3 ab und schreibt sie nur ins Log. Mit dem Log-Writer der Extension kommen auch diese Einträge ab ERROR in Fehlo an:

config/system/additional.php
$GLOBALS['TYPO3_CONF_VARS']['LOG']['writerConfiguration'] = [
    \TYPO3\CMS\Core\Log\LogLevel::ERROR => [
        \Networkteam\SentryClient\SentryLogWriter::class => [],
    ],
];

Datenschutz

Standardmäßig hängt die Extension an jedes Ereignis die UID des Backend- und Frontend-Nutzers und eine von TYPO3 gekürzte IP-Adresse (reportUserInformation = userid). Im Beispiel oben steht es auf none: dann gehen weder Nutzer-IDs noch IP mit. Fehlo entfernt die Absender-IP ohnehin und filtert E-Mail-Adressen, Passwörter und Tokens. Notices und Deprecations meldet die Extension nicht, Fehler beim Verbindungsaufbau zur Datenbank standardmäßig auch nicht.

Häufige Fragen

Funktioniert das mit TYPO3 11?

Version 6.0.0 unterstützt TYPO3 12, 13 und 14. Für TYPO3 11 gibt es die Version 5.2.1 der Extension.

Geht das ohne Composer?

Nicht mit aktuellen Versionen. Seit Version 5.0.0 wird die Extension nur noch über Composer verteilt.

Kann ich weitere SDK-Optionen setzen?

Ja, über $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['sentry_client']['options'] in der additional.php, etwa eine Sample-Rate.

Es kommt nichts an. Was prüfe ich?

Erstens den DSN: Er muss auf app.fehlo.de zeigen. Zweitens, ob dein Server oder Browser https://app.fehlo.de erreicht (Firewall, Proxy, Werbeblocker). Drittens, ob dein Kontingent für den Monat aufgebraucht ist; dann bekommst du eine Mail. Viertens, ob sampleRate oder beforeSend Ereignisse verwirft. Fehlen nur Performance-Daten, sind vielleicht die Transaktionen des Monats aufgebraucht.