0Pricing
Java Academy · Lezione

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 %:

  • %d indica il timestamp, %level il livello.
  • %logger indica il nome del logger, %thread il thread.
  • %msg indica il messaggio, %n una 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.xml e 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 scan per 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.

Tutte le lezioni di questo corso

  1. Perché usare il logging strutturato
  2. Facade e logger SLF4J
  3. Logging parametrizzato
  4. Configurare Logback
← Torna a Java Academy