Wat is logging
De logging van Laravel is opgebouwd rond het concept van channels. Een channel is een configuratie-eenheid die bepaalt waar en hoe logs worden weggeschreven; je kunt allerlei uitvoerbestemmingen combineren, zoals bestanden, Slack en syslog. Intern wordt de bibliotheek Monolog gebruikt, waardoor je toegang hebt tot een breed scala aan handlers en formatters.Standaard wordt het channel
stack gebruikt. stack is een parent-channel dat meerdere channels bundelt.Configuratie
De loggingconfiguratie is gecentraliseerd inconfig/logging.php. Met de omgevingsvariabele LOG_CHANNEL wissel je het standaardchannel.
Beschikbare channeldrivers
Logniveaus
Laravel ondersteunt de acht logniveaus die zijn gedefinieerd in RFC 5424. Ze staan gerangschikt van hoogste naar laagste ernst.
De instelling
level van een channel betekent het minimale logniveau.
Is level bijvoorbeeld error, dan wordt alleen error en hoger (critical, alert, emergency) weggeschreven.
Basisgebruik
De Log-facade
Met de facadeIlluminate\Support\Facades\Log schrijf je berichten op elk niveau weg.
De log()-helperfunctie
Met delog()-helper kun je schrijven zonder de Log-facade te importeren.
Contextinformatie toevoegen
Geef je samen met het bericht context (een array) door, dan leg je gerelateerde informatie in één keer vast.withContext() — gedeelde context toevoegen aan een heel channel
Wil je voor een specifiek channel gemeenschappelijke informatie toevoegen aan alle volgende logentries, gebruik danwithContext().
Dit is geschikt voor informatie die je in alle logs wilt opnemen, zoals een request-ID.
shareContext() — gedeelde context toevoegen aan alle channels
WaarwithContext() alleen effect heeft op het doelchannel, voegt shareContext() gemeenschappelijke context toe aan alle channels.
Channels configureren
Het stack-channel — tegelijk naar meerdere channels schrijven
Met hetstack-channel schrijf je met één logaanroep naar meerdere channels.
debug naar daily (bestand) geschreven, en wordt alleen critical en hoger ook naar slack gestuurd.
Het daily-channel — logrotatie
Hetdaily-channel splitst de bestanden per datum en verwijdert oude bestanden automatisch.
Foutmeldingen naar Slack
Haal een Incoming Webhook URL van Slack op en stel die in in.env.
slack op in het stack-channel en stel LOG_CHANNEL=stack in; bij fouten krijg je dan automatisch een melding.
Naar een specifiek channel schrijven
MetLog::channel() geef je expliciet het doelchannel op.
On-demand channels
MetLog::build() maak je ter plekke een aangepast channel zonder het in het configuratiebestand te definiëren.
Handig voor tests of het schrijven naar een tijdelijke uitvoerbestemming.
Praktische use-cases
Een request-ID toevoegen via middleware
Door aan alle logs een gemeenschappelijke request-ID toe te voegen, kun je in de logs eenvoudiger het verloop van een specifiek request volgen.1
Maak de middleware aan
2
Implementeer de handle()-methode
3
Registreer de middleware
Registreer de middleware als globale middleware in
bootstrap/app.php.request-id.
Deprecation-waarschuwingen loggen
Je kunt waarschuwingen loggen wanneer deprecated functionaliteit van PHP of Laravel wordt gebruikt..env.
Laravel Pail — logs in realtime volgen
Laravel Pail is een ontwikkeltool waarmee je de logs van je applicatie in realtime in de terminal bekijkt. Anders dan het standaardtail-commando is Pail ontworpen om te werken met elke logdriver, waaronder Laravel Nightwatch, Sentry en Flare.
Voor het uitvoeren van Pail is de PCNTL-extensie van PHP vereist.
Installatie
Basisgebruik
Logs filteren
Samenvatting
Het juiste logniveau kiezen
Het juiste logniveau kiezen
Richtlijnen voor het kiezen van channels
Richtlijnen voor het kiezen van channels
- Ontwikkelomgeving: naar bestand schrijven met
singleofdaily - Productie:
stackmet een combinatie vandaily(bestandsopslag) enslack(foutmeldingen) - Logs van specifieke processen: met
Log::build()een on-demand channel maken en naar een apart bestand schrijven - Realtime monitoring: bekijken vanuit de terminal met
php artisan pail
Aandachtspunten in productie
Aandachtspunten in productie
debug-logs kunnen gevoelige informatie bevatten. In productie wordtLOG_LEVEL=errorof hoger aanbevolen.- Roteer logbestanden regelmatig zodat ze de schijf niet vol laten lopen (de instelling
daysvan hetdaily-channel). - Let bij meldingen naar externe services zoals Slack op rate limits. Stel het niveau zo in dat alleen ernstige fouten worden gemeld.