Fouten loggen en best practices
Log fouten naar bestanden en volg patronen voor foutafhandeling in productie.
Fouten loggen en best practices is een gratis PHP Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject PHP Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus PHP Academy bevat in totaal 4 lessen.
Waarom logboekregistratie belangrijk is
In productie kun je geen fouten aan gebruikers tonen, maar je moet nog steeds weten wanneer er iets misgaat. Logboekregistratie legt foutdetails vast in bestanden of diensten, zodat je ze later kunt onderzoeken.
error_log()
De eenvoudigste functie voor logboekregistratie — schrijft een bericht naar het foutenlogboek van PHP:
<?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');Gestructureerde logboekregistratie
Registreer gestructureerde gegevens als JSON om ze eenvoudiger te kunnen analyseren en doorzoeken:
<?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,
]);Logniveaus (PSR-3)
PSR-3 definieert standaardlogniveaus:
- noodgeval — systeem onbruikbaar
- alarm — er moet actie worden ondernomen
- kritiek — kritieke omstandigheden
- fout — fouten tijdens de uitvoering
- waarschuwing — uitzonderlijke gebeurtenissen die geen fouten zijn
- kennisgeving — normale maar belangrijke gebeurtenissen
- informatie — informatieve berichten
- foutopsporing — gedetailleerde informatie voor foutopsporing
Monolog-logboekschrijver
Monolog is de standaardbibliotheek voor PHP-logboekregistratie en is compatibel met PSR-3:
<?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]);Uitzonderingsafhandeling in productie
Een foutafhandelaar voor productie die uitzonderingen registreert en een veilige reactie retourneert:
<?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);
});Logboekrotatie
Logboekbestanden groeien onbeperkt — roteer ze met logrotate op Linux of met tijdgebaseerde afhandelaars 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);Logboekregistratie met context
Neem de context van de aanvraag op in elke logboekvermelding om foutopsporing eenvoudiger te maken:
<?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]
));Gevoelige gegevens uit logboeken houden
Registreer nooit gevoelige informatie:
- Wachtwoorden en tokens
- Creditcardnummers
- Persoonsgegevens (naleving van de AVG)
- Volledige stacktraces van uitzonderingen in reacties die aan gebruikers worden getoond
<?php
// Bad:
error_log('Login attempt: ' . $email . ' / ' . $password);
// Good:
error_log('Login failed for user: ' . substr($email, 0, 3) . '***');Sentry en externe foutopsporing
Gebruik in productie foutopsporingsdiensten zoals Sentry om fouten te centraliseren en er meldingen voor te geven:
<?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;
}Voorwaarden vooraf op basis van asserties
Gebruik asserties om programmeerfouten tijdens de ontwikkeling op te sporen:
<?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');
}Korte controle
Welk logniveau geeft volgens PSR-3 een situatie aan die onmiddellijke aandacht vereist?
Samenvatting: foutregistratie
Goede werkwijzen voor logboekregistratie:
- Gebruik gestructureerde JSON-logboekregistratie met tijdstempel, niveau, bericht en context
- Volg de PSR-3-logniveaus
- Gebruik Monolog in productietoepassingen
- Roteer logboeken om te voorkomen dat de schijf vol raakt
- Registreer nooit wachtwoorden of gevoelige gegevens
- Gebruik Sentry of iets vergelijkbaars voor realtime-foutopsporing
Leer PHP met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 49
- Lessen
- 195
Veelgestelde vragen
Is de les “Fouten loggen en best practices” gratis?
Ja — de volledige tekst van “Fouten loggen en best practices” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus PHP Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus PHP Academy bevat in totaal 4 lessen.
Wat leer ik in “Fouten loggen en best practices”?
Log fouten naar bestanden en volg patronen voor foutafhandeling in productie. Je oefent met PHP Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met PHP Academy te beginnen?
Ervaring vooraf is niet nodig. PHP Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.
Hoe lang duurt de les “Fouten loggen en best practices”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over PHP Academy?
Ja. Elke les over PHP Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- PHP-fouttypen en rapportage
- Try, catch en finally
- Aangepaste uitzonderingen maken
- Fouten loggen en best practices