Java Academy · Lektion

Konfigurera Logback

Appenders, mönster och nivåer.

Lektion 4 av 413 steg

Konfigurera Logback är en gratis lektion i Java Academy på CoddyKit. Detta är lektion 4 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Java Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Java Academy innehåller totalt 4 lektioner.

Vad är Logback?

Logback är en populär SLF4J-backend, skriven av samma upphovsperson som Log4j. Den utför faktiskt den loggning som SLF4J-anropen beskriver.

Du konfigurerar den med en fil som heter logback.xml på classpath, vanligtvis under 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 byggstenar

Logbacks konfiguration har tre centrala begrepp:

  • Logger: en namngiven källa till logghändelser, med en nivå.
  • Appender: en destination, till exempel konsolen eller en fil.
  • Encoder/Layout: formaterar händelsen till text.
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");
    }
}

En console-appender

Den enklaste konfigurationen skickar allt till konsolen. Enkoderns mönster styr radformatet.

Denna XML finns i logback.xml, inte i din Java-kod.

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

Förstå mönstret

Mönstrets konverteringsord börjar med %:

  • %d tidsstämpel, %level nivån.
  • %logger loggernamnet, %thread tråden.
  • %msg ditt meddelande, %n en ny rad.

%-5level lägger utfyllnad till vänster om nivån så att bredden blir 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");
    }
}

Rootloggern och nivåer

Elementet <root> anger standardnivån för hela applikationen och vilka appenders den skriver till.

Om du anger level="info" loggas INFO, WARN och ERROR; DEBUG och TRACE undertrycks.

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

Nivåer per paket

Lägg till ett <logger>-element för att åsidosätta nivån för ett paket. På så sätt kan du aktivera DEBUG för din egen kod och samtidigt hålla biblioteken tysta.

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

En RollingFileAppender

I produktion skriver du vanligtvis till filer som roteras dagligen eller efter storlek, så att loggarna inte växer obegränsat.

RollingFileAppender med en tidsbaserad policy skapar en fil per dag och sparar en historik med begränsad storlek.

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

Flera appenders samtidigt

Rootloggern kan referera till flera appenders, så loggarna skickas till både konsolen och en fil samtidigt.

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

Skriv ut MDC

Om du vill ta med MDC-kontext, till exempel ett begärande-ID, på varje rad lägger du till %X{key} i mönstret.

Därefter visas alla värden som du lägger in i MDC automatiskt.

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();
    }
}

Additivitet

Som standard skickas en loggers händelser även till dess överordnade loggers appenders. Detta kallas additivitet.

Om en paketlogger har en egen appender och du inte vill ha duplicerade utdata anger du additivity="false" för den.

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

Automatisk omladdning och variabler

Logback kan läsa om konfigurationen med jämna mellanrum med hjälp av <configuration scan="true">, vilket är användbart när du vill ändra nivåer utan omstart.

Du kan också läsa egenskaper, till exempel en loggkatalog, med platshållare som ${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>

Snabbtest

Testa dina kunskaper i Logback-konfiguration.

Sammanfattning

Du har lärt dig att konfigurera Logback:

  • Konfigurationen finns i logback.xml och innehåller loggers, appenders och encoders.
  • Mönster formaterar rader med %d, %level, %msg, %X{}.
  • RollingFileAppender roterar loggar; ange nivåer per paket och additivitet.
  • Aktivera scan för omkonfiguration i drift.

Du har slutfört loggningskursen.

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");
    }
}
Gratis att börja

Lär dig Java med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
104
Lektioner
374

Vanliga frågor

Är lektionen ”Konfigurera Logback” gratis?

Ja – hela texten till ”Konfigurera Logback” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Java Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Java Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Konfigurera Logback”?

Appenders, mönster och nivåer. Ni övar på Java Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Java Academy?

Du behöver inga förkunskaper. Utbildningen i Java Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.

Hur lång tid tar lektionen ”Konfigurera Logback”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Java Academy-lektionen?

Ja. Varje Java Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Varför strukturerad loggning
  2. SLF4J-fasad och loggers
  3. Parameteriserad loggning
  4. Konfigurera Logback
← Tillbaka till Java Academy