Bouw een aangepast foutopsporings- en loggingsysteem in Laravel
description
Helpt je bij het proactief identificeren en oplossen van kritieke fouten, vermindert systeemdowntime en optimaliseert de foutafhandeling met een geïntegreerde, op maat gemaakte oplossing.
prompt
try_prompt
Help mij een aangepast foutopsporings- en loggingsysteem te bouwen in mijn Laravel-applicatie dat geavanceerde monitoring, foutmeldingen en real-time analytics integreert. Ik wil logkanalen configureren en koppelen aan een externe dienst, zoals <E ... more
generate_helper
...
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier is een stapsgewijze handleiding om een geavanceerd foutopsporings- en loggingsysteem in Laravel op te zetten met meerdere logkanalen en integratie met Sentry:
1. Installeer de benodigde pakketten:
Voor Sentry:
```bash
composer require sentry/sentry-laravel
```
2. Configureer Sentry in je `config/logging.php`:
Voeg een nieuwe kanaal toe onder `channels`:
```php
'channels' => [
// Bestaande kanalen...
'sentry' => [
'driver' => 'sentry',
],
],
```
3. Stel je logkanalen in:
Je kunt meerdere kanalen definiëren, bijvoorbeeld voor dagelijkse logs en kritieke fouten. Gebruik hiervoor `stack`-kanalen en custom kanalen:
```php
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['daily', 'critical', 'sentry'],
],
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
'days' => 14,
],
'critical' => [
'driver' => 'single',
'path' => storage_path('logs/critical.log'),
'level' => 'error',
],
'sentry' => [
'driver' => 'sentry',
],
],
```
4. Logberichten categoriseren:
Gebruik verschillende niveaus (`error`, `warning`, `info`, `debug`) afhankelijk van de ernst van de logs. Voor kritieke fouten kun je bijvoorbeeld:
```php
Log::channel('critical')->error('Kritieke fout opgetreden: ...');
```
5. Fouten en waarschuwingen automatisch naar Sentry sturen:
Laravel en Sentry werken samen zodat ongevangen uitzonderingen automatisch worden doorgestuurd. Voor handmatige meldingen:
```php
Sentry\captureMessage('Een belangrijke waarschuwing', Sentry\Severity::warning());
Sentry\captureException($exception);
```
6. Real-time monitoring en waarschuwingen:
- Configureer Sentry om waarschuwingen te sturen via e-mail of integraties (bijvoorbeeld Slack). Dit doe je via het Sentry-dashboard onder 'Alerts' en 'Integrations'.
- Voor aanvullende monitoring kun je tools zoals Laravel Telescope of andere APM-diensten integreren.
7. Extra tips:
- Stel logniveau's in op basis van je omgeving (`.env`), bijvoorbeeld `LOG_LEVEL=debug` voor ontwikkeling en `error` voor productie.
- Gebruik Laravel's `report`-functie om aangepaste foutafhandeling te definiëren in `app/Exceptions/Handler.php`.
Door deze configuratie op te zetten, heb je een krachtig en flexibel foutopsporings- en loggingsysteem dat meerdere kanalen gebruikt en kritieke fouten snel signaleert.
provider: deepseek
model: deepseek-chat
Ik help je graag een geavanceerd loggingsysteem in Laravel op te zetten. Hier is een stapsgewijze handleiding:
## 1. Sentry installatie en configuratie
Installeer eerst de Sentry SDK:
```bash
composer require sentry/sentry-laravel
```
Publiceer de configuratie:
```bash
php artisan sentry:publish --dsn=https://jouw_sleutel@sentry.io/jouw_project
```
## 2. Logging configuratie aanpassen
Bewerk `config/logging.php`:
```php
'channels' => [
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
'days' => 14,
],
'critical' => [
'driver' => 'single',
'path' => storage_path('logs/critical.log'),
'level' => 'critical',
],
'sentry' => [
'driver' => 'sentry',
'level' => 'error', // Alleen errors en hoger naar Sentry
],
],
```
## 3. Meerdere kanalen configureren in .env
```env
LOG_CHANNEL=stack
LOG_STACK="daily,sentry,critical"
LOG_LEVEL=debug
SENTRY_LARAVEL_DSN=https://jouw_sleutel@sentry.io/jouw_project
```
## 4. Aangepaste logging handler maken
Maak een custom logger in `app/Logging/CustomLogger.php`:
```php
<?php
namespace App\Logging;
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use Monolog\Formatter\LineFormatter;
class CustomLogger
{
public function __invoke(array $config)
{
$logger = new Logger('custom');
$formatter = new LineFormatter(
"[%datetime%] %channel%.%level_name%: %message% %context% %extra%\n",
"Y-m-d H:i:s"
);
// Daily logs
$dailyHandler = new StreamHandler(
storage_path('logs/laravel.log'),
Logger::DEBUG
);
$dailyHandler->setFormatter($formatter);
// Critical errors
$criticalHandler = new StreamHandler(
storage_path('logs/critical.log'),
Logger::CRITICAL
);
$criticalHandler->setFormatter($formatter);
$logger->pushHandler($dailyHandler);
$logger->pushHandler($criticalHandler);
return $logger;
}
}
```
## 5. Exception handler aanpassen
Bewerk `app/Exceptions/Handler.php`:
```php
<?php
namespace App\Exceptions;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Throwable;
use Illuminate\Support\Facades\Log;
class Handler extends ExceptionHandler
{
public function report(Throwable $exception)
{
if ($this->shouldReport($exception)) {
// Kritieke fouten apart loggen
if ($exception instanceof \Exception && $this->isCritical($exception)) {
Log::channel('critical')->error($exception->getMessage(), [
'exception' => $exception,
'url' => request()->fullUrl(),
'ip' => request()->ip()
]);
}
// Naar Sentry sturen voor errors en hoger
if (app()->bound('sentry') && $this->shouldReportToSentry($exception)) {
app('sentry')->captureException($exception);
}
}
parent::report($exception);
}
protected function isCritical(Throwable $exception): bool
{
return $exception->getCode() >= 500 ||
$exception instanceof \Illuminate\Database\QueryException;
}
protected function shouldReportToSentry(Throwable $exception): bool
{
return $exception instanceof \Exception &&
!$exception instanceof \Illuminate\Http\Exceptions\HttpResponseException;
}
}
```
## 6. Waarschuwingssysteem implementeren
Maak een service provider voor waarschuwingen:
```php
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Log;
class LogServiceProvider extends ServiceProvider
{
public function boot()
{
Log::emergency('Systeem emergency: applicatie gestart');
// Luister naar kritieke events
$this->app['events']->listen('*', function ($eventName, $data) {
if ($this->isCriticalEvent($eventName, $data)) {
Log::channel('critical')->warning('Kritieke gebeurtenis: ' . $eventName, [
'data' => $data
]);
}
});
}
protected function isCriticalEvent($eventName, $data): bool
{
$criticalEvents = [
'Illuminate\Database\Events\QueryException',
'Illuminate\Cache\Events\KeyForgotten',
'Illuminate\Queue\Events\JobFailed'
];
return in_array($eventName, $criticalEvents);
}
}
```
## 7. Gebruik in je applicatie
```php
// Normale logging
Log::channel('daily')->info('Gebruiker ingelogd', ['user_id' => auth()->id()]);
// Kritieke fouten
try {
// kritieke operatie
} catch (\Exception $e) {
Log::channel('critical')->error('Kritieke fout opgetreden', [
'error' => $e->getMessage(),
'trace' => $e->getTraceAsString()
]);
// Stuur ook naar Sentry
if (app()->bound('sentry')) {
app('sentry')->captureException($e);
}
}
```
## 8. Waarschuwingen ontvangen
Voor e-mail waarschuwingen, voeg toe aan `config/logging.php`:
```php
'critical_slack' => [
'driver' => 'slack',
'url' => env('LOG_SLACK_WEBHOOK_URL'),
'username' => 'Laravel Critical Log',
'emoji' => ':boom:',
'level' => 'critical',
],
```
En in je .env:
```env
LOG_SLACK_WEBHOOK_URL=https://hooks.slack.com/services/...
```
Dit systeem geeft je geavanceerde monitoring met gescheiden logkanalen, real-time analytics via Sentry, en automatische waarschuwingen voor kritieke fouten.

