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

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

try_prompt

generate_helper
disclaimerOnPageApi

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.