Skip to main content

Cos’è il logging

Il logging di Laravel è progettato attorno al concetto di channel. Un channel è l’unità di configurazione che definisce destinazione e modalità di scrittura dei log; puoi combinare file, Slack, syslog e altre destinazioni. Internamente usa la libreria Monolog, quindi hai a disposizione un’ampia gamma di handler e formatter.
Per default viene usato il channel stack. stack è un channel genitore che raggruppa più channel.

Configurazione

Tutta la configurazione del logging è centralizzata in config/logging.php. Il channel di default si cambia con la variabile d’ambiente LOG_CHANNEL.

Driver disponibili

Log level

Laravel supporta gli otto livelli di log definiti da RFC 5424. Sono elencati in ordine di gravità decrescente. L’impostazione level di un channel indica il livello minimo. Se level è error, vengono scritti solo error e livelli superiori (critical, alert, emergency).

Uso di base

Facade Log

Con la facade Illuminate\Support\Facades\Log scrivi messaggi di ogni livello.
Esempio d’uso in un controller.

La funzione helper log()

Con l’helper log() puoi scrivere senza importare la facade Log.

Aggiungere informazioni di contesto

Passando un array di context insieme al messaggio, registri anche informazioni correlate.

withContext() — context comune al channel

Se vuoi allegare context comune a tutte le successive scritture di un channel specifico, usa withContext(). Utile per informazioni come il request ID che vuoi in tutti i log.

shareContext() — context comune a tutti i channel

Mentre withContext() è limitato al channel corrente, shareContext() distribuisce il context a tutti i channel.

Configurazione dei channel

Channel stack — scrittura simultanea su più channel

Il channel stack scrive con una sola chiamata su più channel.
Con questa configurazione, tutti i log da debug in su vanno su daily (file), mentre critical e superiori vanno anche su Slack.
In produzione conviene impostare il livello del channel slack su error o critical. Trasmettere anche i log meno rilevanti su Slack sommerge di notifiche e nasconde gli alert importanti.

Channel daily — rotazione dei log

Il channel daily divide i file per giorno e rimuove automaticamente i vecchi.
Un valore basso di days elimina prima i file più vecchi. In produzione mantieni una finestra sufficiente per l’analisi degli incidenti.

Notifiche di errore su Slack

Ottieni un Incoming Webhook URL di Slack e impostalo nel .env.
Includendo slack nel channel stack e impostando LOG_CHANNEL=stack, verranno notificati automaticamente gli errori.

Scrivere su un channel specifico

Con Log::channel() puoi indicare esplicitamente il channel di destinazione.

Channel on-demand

Con Log::build() puoi creare al volo un channel personalizzato senza definirlo nel file di configurazione. Utile in test o per output temporanei.

Casi d’uso pratici

Aggiungere un request ID tramite middleware

Aggiungendo un request ID a tutti i log, tracci facilmente il flusso di una singola richiesta.
1

Crea il middleware

2

Implementa handle()

3

Registra il middleware

Registralo come middleware globale in bootstrap/app.php.
Da questo momento, il request-id viene allegato automaticamente a tutti i log.

Registrare gli avvisi di deprecation

Puoi conservare nei log gli avvisi generati dall’uso di funzionalità deprecate di PHP o Laravel.
Nel .env specifica il channel.

Laravel Pail — monitoraggio dei log in tempo reale

Laravel Pail è uno strumento di sviluppo che consente di visualizzare in terminale i log dell’applicazione in tempo reale. A differenza del classico comando tail, funziona con qualsiasi driver di log, incluso Laravel Nightwatch, Sentry e Flare.
Per eseguire Pail serve l’estensione PHP PCNTL.

Installazione

Uso di base

Filtro dei log

  • Sviluppo: scrivi su file con single o daily
  • Produzione: usa stack combinando daily (file) e slack (notifica errori)
  • Log di elaborazioni specifiche: crea un channel on-demand con Log::build() per scrivere su un file dedicato
  • Monitoraggio real-time: usa php artisan pail dal terminale
  • I log debug possono contenere dati sensibili. In produzione è consigliato LOG_LEVEL=error o superiore.
  • Ruota i file di log periodicamente per non riempire il disco (opzione days del channel daily).
  • Per le notifiche verso servizi esterni come Slack, attenzione ai rate limit: imposta il livello per notificare solo gli errori critici.
Ultima modifica il 2 agosto 2026