Laravel errors loggen in Slack

Laravel errors loggen in Slack
published 03-03-2025

Een artikel hoe je Laravel foutmeldingen kan versturen naar Slack, in Laravel versie 11 en 12.

Lagere Laravel versies

Hoewel er verschillen zijn met afhandelen van fouten in eerdere versies van Laravel is het artikel grotendeels bruikbaar.

Slack webhook URL aanmaken

Uiteraard moet je eerst een Slack account hebben. Daarnaast moeten we een Slack Webhook URL hebben, deze maak je als volgt aan:

  • Ga naar de volgende URL https://api.slack.com/apps
  • Klik op de button 'Create an App'
  • Kies bij de volgende optie op 'From scratch'
  • Geef een naam en de workspace op waarop je de meldingen op wilt ontvangen
  • Klik daarna in het linkermenu (onder Features) op 'Incomming Webhooks'
  • Zet deze nu aan, door op het schuifje op 'On' te zetten.
  • Klik vervolgens op de button 'Add New Webhook to Workspace' op deze pagina
  • Selecteer op het volgende scherm het kanaal waar de foutmeldingen op moeten binnenkomen.
  • Als dat is gedaan, zal je zien dat er een webhook is aangemaakt

Webhook URL toevoegen aan Laravel

Om meldingen in Slack te kunnen ontvangen hoef je helemaal zelf niets meer te installeren, dat zit standaard al in Laravel. Wat je wel moet doen is de aangemaakte webhook URL toevoegen aan je .env bestand

LOG_SLACK_WEBHOOK_URL=https://hooks.slack.com/services/......

Foutmeldingen naar Slack sturen

Je kan nu wel meldingen op Slack krijgen doorbijvoorbeeld

<?php
Log::channel('slack')->info('test berichtje');

Maar foutmeldingen gaan standaard nog niet naar Slack.

withExceptions

In de method withExceptions in het bestand bootstrap/app.php kunnen foutmeldingen worden afgevangen. Hierbij een voorbeeldje hoe we deze foutmeldingen naar Slack kunnen versturen.

  • We willen dit alleen op productie hebben.
  • Bij deze optie worden alleen de kritieke foutmeldingen naar Slack verzonden, je kan dit uiteraard aanpassen.
->withExceptions(function (Exceptions $exceptions) {

    if (config('app.env') === 'production') {

        $exceptions->render(function (Throwable $e, Request $request) {

            if ($e->getStatusCode() >= 500) {
                Log::channel('slack')->error($e->getMessage());
            }
        });
    }

})
	

Testen

We kunnen dit lokaal eerst even testen door de if statement if (config('app.env') === 'production') { weg te halen.
Vervolgens zet je ergens op een pagina de volgende code:

 abort(500, 'Test bericht');

Roep deze pagina nu aan in je browser, in Slack zou je nu dit 'Test bericht' moeten zien.

Webbouwplus

Marcel van Doornen - Laravel Freelance developer
Marcel van Doornen, freelance Laravel developer. Ben je benieuwd hoe ik jou kan helpen?
Neem contact met mij op
©2025 Webbouw Plus