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