Spring Boot – Logging
In un’architettura a micro servizi i log svolgono un ruolo fondamentale.
Il formato predefinito dei log in Spring Boot è:
Le informazioni mostrate sono:
- Data e ora
- Il livello del log ( INFO )
- ID processo
- Il — che è un separatore
- Il nome del thread, racchiuso tra parentesi quadre []
- Nome logger, mostra il nome della classe che ha generato la loggata
- Il messaggio vero e proprio
Livelli di Log
Ricordiamo velocemente che si definisce il livello di log del messaggio una specie di priorità assegnato ad esso.
La seguente tabella definisce i livelli dei log in ordine decrescente di severità. La colonna di sinistra indica il livello di log designato e alla destra c’è una breve descrizione.
Livello | Descrizione |
OFF | Il livello più alto possibile, viene usato per disattivare i log. |
FATAL | Errore importante che causa un prematuro termine dell’esecuzione. Ci si aspetta che questo sia visibile immediatamente all’operatore. |
ERROR | Un errore di esecuzione o una condizione imprevista. Anche questo deve essere immediatamente segnalato. |
WARN | Usato per ogni condizione inaspettata o anomalia di esecuzione, che però non necessariamente ha comportato un errore. |
INFO | Usato per segnalare eventi di esecuzione (esempio: startup/shutdown). Deve essere segnalato ma poi non mantenuto per tanto tempo. |
DEBUG | Usato nella fase di debug del programma. Viene riportato nel file di log. |
TRACE | Alcune informazioni dettagliate. Ci si aspetta che venga scritto esclusivamente nei file di log. |
Si ha un livello di log dell’applicazione e un livello di log per ogni messaggio stampato.
Ad esempio, impostando un livello di log dell’applicazione pari a DEBUG verranno stampati tutti messaggi con livello DEBUG e tutti i messaggi con i livelli superiori a DEBUG, ossia INFO, WARN, ERROR, FATAL, OFF.
In genere, i livelli di log vengono usati per evitare una eccessiva verbosità dei messaggi: alcune informazioni sono necessarie durante lo sviluppo ma non quando l’applicazione è in produzione.
Esempio
Durante la fase di sviluppo, possiamo settare il livello dei log dell’applicazione a DEBUG, quindi stampare solo i messaggi di livello DEBUG e superiore.
Quando si passa in produzione, impostiamo il livello dei log dell’applicazione a INFO, riducendo in questo modo il numero di informazioni superflue in questa fase.
Configurare il logging
La configurazione del logging viene impostata nel file di properties.
Esempio
Application.yml
# ============================================================== # = Articoli Web Service - Versione Autenticazione JWT # ============================================================== server: port: 5051 spring: application: name: ProductsWebService # ============================================================== # = Proprietà Livello Log # = Default ERROR, WARN e INFO # = Levels: TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF # ============================================================== logging: file: name: ArtSrv.log max-size: 1MB #path: "/logs" pattern: file: "%d{ dd-MM-yyyy } [%thread] %-5level %logger{36} - %msg%n" #console: "%d{dd-MM-yyyy HH:mm:ss} - %msg%n" # Livello del Log generale level: root: WARN
L’elemento più importante è il settaggio che riguarda il livello di log, in questo caso WARN:
# Livello del Log generale level: root: WARN
Avviando il nostro servizio, vedremo pochissime loggate:
In questo caso, abbiamo settato i package org.hibernate e org.springframwork.web a livello INFO e il package org.springframework.security a DEBUG.