Configurare Logback
Appender, pattern e livelli
Configurare Logback è una lezione Java Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Java Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Java Academy include 4 lezioni in totale.
Che cos'è Logback?
Logback è un backend SLF4J molto diffuso, scritto dallo stesso autore di Log4j. Esegue effettivamente il logging descritto dalle chiamate SLF4J.
Lo configuri con un file denominato logback.xml nel classpath, generalmente in src/main/resources.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
private static final Logger log = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) {
log.info("Logback reads logback.xml at startup");
}
}Tre elementi fondamentali
La configurazione di Logback si basa su tre concetti fondamentali:
- Logger: sorgente denominata di eventi di log, con un livello.
- Appender: una destinazione (console, file).
- Encoder/Layout: formatta l'evento in testo.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
private static final Logger log = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) {
log.info("logger -> appender -> encoder -> output");
}
}Un appender per la console
La configurazione più semplice invia tutto alla console. Il pattern dell'encoder controlla il formato della riga.
Questo XML si trova in logback.xml, non nel codice Java.
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="STDOUT" />
</root>
</configuration>Comprendere il pattern
Le parole di conversione del pattern iniziano con %:
%dindica il timestamp,%levelil livello.%loggerindica il nome del logger,%threadil thread.%msgindica il messaggio,%nuna nuova riga.
%-5level aggiunge spazi a sinistra al livello fino a una larghezza di 5.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
private static final Logger log = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) {
// Output rendered by pattern: time LEVEL logger - message
log.info("hello");
}
}Il logger radice e i livelli
L'elemento <root> imposta il livello predefinito per l'intera applicazione e gli appender su cui scrive.
Impostare level="info" significa che vengono emessi INFO, WARN ed ERROR, mentre DEBUG e TRACE vengono soppressi.
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder><pattern>%-5level %logger - %msg%n</pattern></encoder>
</appender>
<root level="warn">
<appender-ref ref="STDOUT" />
</root>
</configuration>Livelli per pacchetto
Aggiunga un elemento <logger> per sovrascrivere il livello di un pacchetto. In questo modo può abilitare DEBUG per il proprio codice mantenendo silenziose le librerie.
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder><pattern>%-5level %logger - %msg%n</pattern></encoder>
</appender>
<logger name="com.example.app" level="debug" />
<root level="info">
<appender-ref ref="STDOUT" />
</root>
</configuration>Un appender per file con rotazione
In produzione, in genere si scrive in file che vengono ruotati quotidianamente o in base alle dimensioni, così i log non crescono senza limiti.
RollingFileAppender con una politica basata sul tempo crea un file al giorno e conserva una cronologia limitata.
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/app.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d %-5level [%thread] %logger{36} - %msg%n</pattern>
</encoder>
</appender>Più appender contemporaneamente
Il logger radice può fare riferimento a diversi appender, quindi i log vengono inviati contemporaneamente alla console e a un file.
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder><pattern>%-5level %msg%n</pattern></encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>logs/app.log</file>
<encoder><pattern>%d %-5level %msg%n</pattern></encoder>
</appender>
<root level="info">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</configuration>Stampare l'MDC
Per includere il contesto MDC, ad esempio un ID richiesta, in ogni riga, aggiunga %X{key} al pattern.
Qualsiasi valore inserito nell'MDC comparirà quindi automaticamente.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;
public class Main {
private static final Logger log = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) {
MDC.put("requestId", "req-1234");
// Pattern: %X{requestId} %-5level %msg%n
log.info("handled");
MDC.clear();
}
}Additività
Per impostazione predefinita, gli eventi di un logger vengono inviati anche agli appender dei suoi antenati. Questa è l'additività.
Se un logger di pacchetto dispone di un proprio appender e non desidera un output duplicato, imposti additivity="false" su di esso.
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder><pattern>%-5level %logger - %msg%n</pattern></encoder>
</appender>
<logger name="com.example.audit" level="info" additivity="false">
<appender-ref ref="STDOUT" />
</logger>
<root level="warn">
<appender-ref ref="STDOUT" />
</root>
</configuration>Ricaricamento automatico e variabili
Logback può ricaricare periodicamente la configurazione con <configuration scan="true">, una funzione utile per modificare i livelli senza riavviare l'applicazione.
È inoltre possibile leggere proprietà, come una directory dei log, utilizzando i segnaposto ${LOG_DIR}.
<configuration scan="true" scanPeriod="30 seconds">
<property name="LOG_DIR" value="logs" />
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${LOG_DIR}/app.log</file>
<encoder><pattern>%d %-5level %msg%n</pattern></encoder>
</appender>
<root level="info"><appender-ref ref="FILE" /></root>
</configuration>Verifica rapida
Verifichi le Sue conoscenze della configurazione di Logback.
Riepilogo
Ha appreso come configurare Logback:
- La configurazione si trova in
logback.xmle include logger, appender ed encoder. - I pattern formattano le righe con
%d,%level,%msg,%X{}. - RollingFileAppender ruota i log; imposti i livelli per pacchetto e l'additività.
- Abiliti
scanper la riconfigurazione in tempo reale.
Ha completato il corso sul logging.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
private static final Logger log = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) {
log.info("Logback configuration course complete");
}
}Domande Frequenti
La lezione «Configurare Logback» è gratuita?
Sì — il testo completo di «Configurare Logback» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Java Academy, passa a CoddyKit PRO. Il corso Java Academy include 4 lezioni in totale.
Cosa imparerò in «Configurare Logback»?
Appender, pattern e livelli Eserciti Java Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Java Academy?
Non è richiesta alcuna esperienza precedente. Java Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Configurare Logback»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Java Academy?
Sì. Ogni lezione Java Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.