Konfigurere Logback
Appenders, mønstre og nivåer
Konfigurere Logback er en gratis leksjon i Java Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Java Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Java Academy inneholder totalt 4 leksjoner.
Hva er Logback?
Logback er en populær SLF4J-backend, skrevet av samme forfatter som Log4j. Den utfører faktisk loggingen som SLF4J-kallene beskriver.
Du konfigurerer den med en fil som heter logback.xml på classpath, vanligvis 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 byggesteiner
Logback-konfigurasjon har tre grunnleggende konsepter:
- Logger: navngitt kilde for logghendelser, med et nivå.
- Appender: et mål, for eksempel konsoll eller fil.
- Encoder/Layout: formaterer hendelsen til tekst.
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 konsoll-appender
Den enkleste konfigurasjonen sender alt til konsollen. Mønsteret til encoderen bestemmer formatet på linjen.
Denne XML-en ligger i logback.xml, ikke i Java-koden din.
<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>Forstå mønsteret
Mønsterkonverteringsord begynner med %:
%dtidsstempel,%levelnivået.%loggerloggernavnet,%threadtråden.%msgmeldingen din,%net linjeskift.
%-5level fyller ut nivået med mellomrom på venstre side til bredde 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");
}
}Rotloggeren og nivåer
<root>-elementet angir standardnivået for hele appen og hvilke appendere den skriver til.
Hvis du angir level="info", skrives INFO, WARN og ERROR ut, mens DEBUG og TRACE undertrykkes.
<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 pakke
Legg til et <logger>-element for å overstyre nivået for en pakke. Dermed kan du aktivere DEBUG for din egen kode samtidig som du holder bibliotekene stille.
<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 rullerende fil-appender
I produksjon skriver du vanligvis til filer som roteres daglig eller etter størrelse, slik at loggene ikke vokser uten begrensning.
RollingFileAppender med en tidsbasert policy oppretter én fil per dag og beholder en begrenset historikk.
<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>Flere appendere samtidig
Rotloggeren kan referere til flere appendere, slik at logger sendes til både konsollen og en fil samtidig.
<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>Skrive ut MDC
Hvis du vil ta med MDC-kontekst, for eksempel en forespørsels-ID, på hver linje, legger du til %X{key} i mønsteret.
Deretter vises alle verdier du legger i MDC, automatisk.
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 sendes en loggers hendelser også til appendere hos de overordnede loggerne. Dette kalles additivitet.
Hvis en pakkelogger har sin egen appender og du ikke vil ha duplisert utskrift, angir du additivity="false" på 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 omlasting og variabler
Logback kan laste konfigurasjonen på nytt med jevne mellomrom ved hjelp av <configuration scan="true">. Dette er nyttig når du vil endre nivåer uten å starte programmet på nytt.
Du kan også lese egenskaper, for eksempel en loggmappe, med plassholdere 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>Kort sjekk
Test kunnskapen din om Logback-konfigurasjon.
Oppsummering
Du har lært å konfigurere Logback:
- Konfigurasjonen ligger i
logback.xmlog inneholder loggere, appendere og encodere. - Mønstre formaterer linjer med
%d,%level,%msgog%X{}. - RollingFileAppender roterer logger; angi nivåer per pakke og additivitet.
- Aktiver
scanfor omkonfigurering mens programmet kjører.
Du har fullført loggingskurset.
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 deg Java med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 104
- Leksjoner
- 374
Ofte stilte spørsmål
Er leksjonen «Konfigurere Logback» gratis?
Ja – hele teksten i «Konfigurere Logback» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Java Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Java Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Konfigurere Logback»?
Appenders, mønstre og nivåer Du øver på Java Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Java Academy?
Ingen tidligere erfaring er nødvendig. Java Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.
Hvor lang tid tar leksjonen «Konfigurere Logback»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Java Academy-leksjonen?
Ja. Alle Java Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Hvorfor strukturert logging
- SLF4J-fasade og loggere
- Parameterisert logging
- Konfigurere Logback