Cos’è il logging
Il logging di Laravel è progettato intorno al concetto di canali. Un canale è un’unità di configurazione che definisce dove e come scrivere i log. Puoi combinare file, Slack, syslog e altre destinazioni. Internamente usa la libreria Monolog, sfruttando handler e formatter ricchi.Di default viene usato il canale
stack, un canale “genitore” che raggruppa più canali.Configurazione
La configurazione del logging è inconfig/logging.php. La variabile d’ambiente LOG_CHANNEL cambia il canale predefinito.
Driver di canale disponibili
| Driver | Descrizione |
|---|---|
single | Scrive tutti i log in un unico file |
daily | File per giorno (con rotazione) |
slack | Invia messaggi a un Incoming Webhook di Slack |
stack | Canale genitore che raggruppa più canali |
syslog | Scrive su syslog di sistema |
errorlog | Scrive nella error log di PHP |
monolog | Usa direttamente handler Monolog |
custom | Personalizza completamente con una classe factory |
Livelli di log
Laravel supporta gli 8 livelli definiti in RFC 5424. In ordine di gravità decrescente:| Livello | Esempio d’uso |
|---|---|
emergency | Sistema inutilizzabile; intervento immediato |
alert | Deve intervenire subito un umano (es. DB disconnesso) |
critical | Guasto grave con funzionalità principali ferme |
error | Errore a runtime; intervento necessario ma non sempre immediato |
warning | Problema potenziale (API deprecate, dati anomali) |
notice | Funzionamento normale ma degno di nota |
info | Operazioni ordinarie (login utente, ordine confermato) |
debug | Informazioni dettagliate di debug in sviluppo |
level di un canale è il livello minimo: se è error, solo error e superiori (critical, alert, emergency) vengono scritti.
Uso di base
Facade Log
Usa la facadeIlluminate\Support\Facades\Log per scrivere ai vari livelli.
Funzione helper log()
Con l’helperlog() scrivi senza importare la facade Log.
Aggiungere informazioni di contesto
Passando un array di contesto insieme al messaggio memorizzi informazioni correlate.withContext() — contesto comune a livello di canale
Se vuoi che tutte le voci successive di un canale includano informazioni comuni (come un request ID) usawithContext().
shareContext() — contesto comune a tutti i canali
withContext() è limitato al canale bersaglio; shareContext() propaga il contesto a tutti i canali.
Configurazione dei canali
Canale stack — scrittura simultanea su più canali
Constack scrivi in più canali con una sola chiamata.
debug in su vanno in daily (file) e solo quelli da critical in su vanno anche in Slack.
Canale daily — rotazione dei log
Il canaledaily scrive file separati per giorno ed elimina automaticamente i più vecchi.
Notifica errori su Slack
Ottieni un Incoming Webhook URL e mettilo nel.env.
slack nel canale stack e impostando LOG_CHANNEL=stack ottieni la notifica automatica sugli errori.
Scrivere in un canale specifico
ConLog::channel() scegli esplicitamente il canale.
Canali on-demand
ConLog::build() crei al volo un canale personalizzato senza definirlo nel file di configurazione.
Utile per test o output temporanei.
Casi d’uso pratici
Assegnare un request ID in un middleware
Aggiungendo un request ID comune a tutti i log tracci più facilmente il flusso di una singola richiesta.
Dopo la configurazione, tutti i log conterranno automaticamente
request-id.
Log dei warning di deprecation
Puoi registrare i warning dovuti a funzionalità deprecate di PHP o Laravel..env.
Laravel Pail — monitoraggio log in tempo reale
Laravel Pail è uno strumento di sviluppo per vedere i log dell’applicazione in tempo reale dal terminale.Per eseguire Pail serve l’estensione PHP PCNTL.
Installazione
Uso di base
Filtro dei log
Riepilogo
Come scegliere il livello
Come scegliere il livello
| Livello | Quando usarlo |
|---|---|
emergency | Guasti fatali che fermano tutto |
alert | Deve intervenire subito una persona |
critical | Guasti seri con funzioni principali ferme |
error | Errori runtime imprevisti; intervento necessario |
warning | Uso di funzionalità deprecate o dati inattesi |
notice | Operazioni importanti da tracciare |
info | Operazioni utente ed eventi di business |
debug | Dettagli di debug in sviluppo (non serve in produzione) |
Come scegliere i canali
Come scegliere i canali
- Sviluppo:
singleodailysu file - Produzione:
stackcondaily(file) eslack(notifica errori) - Log specifici: canale on-demand con
Log::build()su file dedicato - Monitoraggio real-time:
php artisan paildal terminale
Attenzioni in produzione
Attenzioni in produzione
- I log
debugpossono contenere info sensibili. In produzione usa almenoLOG_LEVEL=error. - Ruota i file periodicamente per non riempire il disco (opzione
daysdel canaledaily). - Attenzione ai rate limit dei servizi esterni come Slack. Configura il livello per notificare solo gli errori gravi.