Konfigurera Logback
Appenders, mönster och nivåer.
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 %:
%dtidsstämpel,%levelnivån.%loggerloggernamnet,%threadtråden.%msgditt meddelande,%nen 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.xmloch 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
scanfö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");
}
}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
- Varför strukturerad loggning
- SLF4J-fasad och loggers
- Parameteriserad loggning
- Konfigurera Logback