slogan3

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
disclaimerOnPageApi image_legal_disclaimer...

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.