Fehler protokollieren und Best Practices
Protokollieren Sie Fehler in Dateien und befolgen Sie Muster für die Fehlerbehandlung in Produktionsumgebungen.
Fehler protokollieren und Best Practices ist eine kostenlose PHP Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des PHP Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der PHP Academy-Kurs umfasst insgesamt 4 Lektionen.
Warum Protokollierung wichtig ist
In der Produktion können Sie Benutzern keine Fehler anzeigen, müssen aber trotzdem wissen, wenn etwas schiefläuft. Die Protokollierung erfasst Fehlerdetails in Dateien oder Diensten, damit Sie sie später untersuchen können.
error_log()
Die einfachste Protokollierungsfunktion — sie schreibt eine Meldung in das PHP-Fehlerprotokoll:
<?php
error_log('User login failed for: ' . $email);
error_log('DB query took: ' . $duration . 'ms');
// Send to email (not recommended for high traffic)
error_log('Critical: server out of memory', 1, 'admin@example.com');Strukturierte Protokollierung
Protokollieren Sie strukturierte Daten als JSON, damit sie leichter ausgewertet und abgefragt werden können:
<?php
function logEvent(string $level, string $message, array $context = []): void {
$entry = array_merge([
'ts' => date('c'),
'level' => $level,
'message' => $message,
], $context);
error_log(json_encode($entry));
}
logEvent('ERROR', 'Payment failed', [
'order_id' => 123,
'amount' => 99.99,
'user_id' => 45,
]);Protokollstufen (PSR-3)
PSR-3 definiert standardisierte Protokollstufen:
- emergency — System ist nicht verwendbar
- alert — Maßnahmen müssen ergriffen werden
- critical — kritische Bedingungen
- error — Laufzeitfehler
- warning — außergewöhnliche Vorkommnisse, die keine Fehler sind
- notice — normale, aber bedeutende Ereignisse
- info — Informationsmeldungen
- debug — detaillierte Debug-Informationen
Monolog-Logger
Monolog ist die standardmäßige PHP-Protokollierungsbibliothek und mit PSR-3 kompatibel:
<?php
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
$log = new Logger('app');
$log->pushHandler(new StreamHandler('/var/log/app.log', Logger::DEBUG));
$log->info('User logged in', ['user_id' => 42]);
$log->error('Payment failed', ['order' => 99, 'reason' => 'card_declined']);
$log->warning('Slow query', ['duration_ms' => 3200]);Ausnahmebehandlung in der Produktion
Ein produktionsgeeigneter Ausnahmehandler, der protokolliert und eine sichere Antwort zurückgibt:
<?php
set_exception_handler(function(\Throwable $e) {
$id = uniqid('err_');
error_log(json_encode([
'error_id' => $id,
'class' => get_class($e),
'message' => $e->getMessage(),
'file' => $e->getFile(),
'line' => $e->getLine(),
'trace' => $e->getTraceAsString(),
]));
http_response_code(500);
echo json_encode(['error' => 'Server error', 'id' => $id]);
exit(1);
});Protokollrotation
Protokolldateien wachsen unbegrenzt — rotieren Sie sie unter Linux mit logrotate oder mit zeitbasierten Handlern in Monolog:
<?php
use Monolog\Handler\RotatingFileHandler;
$handler = new RotatingFileHandler(
'/var/log/app.log',
30, // keep 30 days
Logger::DEBUG
);
// Creates dated files: app-2024-05-27.log
$log = new Logger('app');
$log->pushHandler($handler);Protokollierung mit umfassendem Kontext
Fügen Sie jedem Protokolleintrag den Kontext der Anfrage hinzu, um die Fehlersuche zu erleichtern:
<?php
function getRequestContext(): array {
return [
'url' => $_SERVER['REQUEST_URI'] ?? '',
'method' => $_SERVER['REQUEST_METHOD'] ?? '',
'ip' => $_SERVER['REMOTE_ADDR'] ?? '',
'user_id' => $_SESSION['user_id'] ?? null,
];
}
// Add to every log call:
$log->error('Order failed', array_merge(
getRequestContext(),
['order_id' => $orderId]
));Vertrauliche Daten aus Protokollen heraushalten
Protokollieren Sie niemals vertrauliche Informationen:
- Passwörter und Token
- Kreditkartennummern
- Personenbezogene Daten (DSGVO-Konformität)
- Vollständige Ausnahme-Stacktraces in Antworten für Benutzer
<?php
// Bad:
error_log('Login attempt: ' . $email . ' / ' . $password);
// Good:
error_log('Login failed for user: ' . substr($email, 0, 3) . '***');Sentry und externe Fehlerverfolgung
Verwenden Sie in der Produktion Fehlerverfolgungsdienste wie Sentry, um Fehler zentral zu erfassen und darüber zu benachrichtigen:
<?php
// After composer require sentry/sdk
\Sentry\init(['dsn' => getenv('SENTRY_DSN')]);
// Automatic capture of unhandled exceptions
// Manual capture:
try {
processOrder();
} catch (\Throwable $e) {
\Sentry\captureException($e);
throw $e;
}Assertions für Vorbedingungen
Verwenden Sie Assertions, um Programmierfehler während der Entwicklung abzufangen:
<?php
// assert() throws AssertionError when false (dev mode)
assert(is_int($userId), 'userId must be an integer');
assert($amount > 0, 'amount must be positive');
// Or throw explicitly:
if (!is_int($userId)) {
throw new \InvalidArgumentException('userId must be int');
}Kurze Überprüfung
Welche Protokollstufe bezeichnet laut PSR-3 eine Situation, die sofortige Aufmerksamkeit erfordert?
Zusammenfassung: Fehlerprotokollierung
Bewährte Vorgehensweisen bei der Protokollierung:
- Verwenden Sie strukturierte JSON-Protokollierung mit Zeitstempel, Stufe, Meldung und Kontext
- Halten Sie die PSR-3-Protokollstufen ein
- Verwenden Sie Monolog in Produktionsanwendungen
- Rotieren Sie Protokolle, damit der Speicherplatz nicht knapp wird
- Protokollieren Sie niemals Passwörter oder vertrauliche Daten
- Verwenden Sie Sentry oder eine ähnliche Lösung zur Fehlerverfolgung in Echtzeit
Häufig gestellte Fragen
Ist die Lektion „Fehler protokollieren und Best Practices“ kostenlos?
Ja — der vollständige Text von „Fehler protokollieren und Best Practices“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des PHP Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der PHP Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Fehler protokollieren und Best Practices“?
Protokollieren Sie Fehler in Dateien und befolgen Sie Muster für die Fehlerbehandlung in Produktionsumgebungen. Du übst PHP Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um PHP Academy zu starten?
Keine Vorkenntnisse erforderlich. PHP Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Fehler protokollieren und Best Practices“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser PHP Academy-Lektion Code schreiben und ausführen?
Ja. Jede PHP Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- PHP-Fehlertypen und Fehlerberichterstattung
- Try, Catch und Finally
- Benutzerdefinierte Exceptions erstellen
- Fehler protokollieren und Best Practices