0Pricing
Java Academy · Lekcja

Konfigurowanie Logback

Appandery, wzorce i poziomy

Konfigurowanie Logback to bezpłatna lekcja Java Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Java Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Java Academy zawiera 4 lekcji w sumie.

Czym jest Logback?

Logback to popularny backend SLF4J, napisany przez tego samego autora co Log4j. Wykonuje on właściwe logowanie opisywane przez wywołania SLF4J.

Konfiguruje się go za pomocą pliku o nazwie logback.xml znajdującego się na ścieżce klas, zwykle w katalogu 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");
    }
}

Trzy podstawowe elementy

Konfiguracja Logback obejmuje trzy podstawowe pojęcia:

  • Logger: nazwane źródło zdarzeń logowania z określonym poziomem.
  • Appender: miejsce docelowe, takie jak konsola lub plik.
  • Encoder/Layout: formatuje zdarzenie do postaci tekstowej.
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");
    }
}

Appender konsolowy

Najprostsza konfiguracja wysyła wszystko do konsoli. Wzorzec enkodera określa format wiersza.

Ten kod XML znajduje się w pliku logback.xml, a nie w kodzie 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>

Zrozumienie wzorca

Słowa konwersji wzorca zaczynają się od %:

  • %d oznacza znacznik czasu, a %level — poziom.
  • %logger oznacza nazwę loggera, a %thread — wątek.
  • %msg oznacza komunikat, a %n — znak nowej linii.

%-5level wyrównuje poziom do lewej, do szerokości 5 znaków.

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

Logger główny i poziomy

Element <root> ustawia domyślny poziom dla całej aplikacji oraz appendery, do których zapisuje.

Ustawienie level="info" oznacza, że zapisywane są poziomy INFO, WARN i ERROR, a DEBUG i TRACE są pomijane.

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

Poziomy dla poszczególnych pakietów

Dodaj element <logger>, aby nadpisać poziom dla pakietu. Dzięki temu możesz włączyć DEBUG dla własnego kodu, zachowując ciszę w bibliotekach.

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

Appender rotujący pliki

Na produkcji zazwyczaj zapisuje się logi do plików, które rotują się codziennie lub po osiągnięciu określonego rozmiaru, dzięki czemu nie rosną bez ograniczeń.

RollingFileAppender z zasadą opartą na czasie tworzy jeden plik dziennie i przechowuje ograniczoną historię.

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

Wiele appenderów jednocześnie

Logger główny może odwoływać się do kilku appenderów, dzięki czemu logi są jednocześnie wysyłane do konsoli i pliku.

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

Wyświetlanie MDC

Aby uwzględnić kontekst MDC, na przykład identyfikator żądania, w każdym wierszu, dodaj %X{key} do wzorca.

Każda wartość umieszczona w MDC będzie wtedy automatycznie wyświetlana.

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

Addytywność

Domyślnie zdarzenia loggera trafiają również do appenderów jego przodków. To właśnie addytywność.

Jeśli logger pakietu ma własny appender i nie chcesz duplikowania danych wyjściowych, ustaw w nim additivity="false".

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

Automatyczne przeładowywanie i zmienne

Logback może okresowo przeładowywać konfigurację za pomocą <configuration scan="true">, co ułatwia zmianę poziomów bez ponownego uruchamiania aplikacji.

Możesz także odczytywać właściwości, takie jak katalog logów, za pomocą placeholderów ${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>

Szybki test

Sprawdź swoją wiedzę o konfiguracji Logback.

Podsumowanie

Nauczyli się Państwo konfigurować Logback:

  • Konfiguracja znajduje się w pliku logback.xml i obejmuje loggery, appendery oraz enkodery.
  • Wzorce formatują wiersze za pomocą %d, %level, %msg i %X{}.
  • RollingFileAppender rotuje logi; można ustawiać poziomy dla pakietów i addytywność.
  • Włącz scan, aby umożliwić rekonfigurację w czasie działania.

Ukończyli Państwo kurs logowania.

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

Często zadawane pytania

Czy lekcja „Konfigurowanie Logback” jest bezpłatna?

Tak — pełny tekst „Konfigurowanie Logback” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Java Academy, przejdź na CoddyKit PRO. Kurs Java Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Konfigurowanie Logback”?

Appandery, wzorce i poziomy Ćwiczysz Java Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Java Academy?

Nie wymagamy żadnego doświadczenia. Java Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Konfigurowanie Logback”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Java Academy?

Tak. Każda lekcja Java Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Dlaczego logowanie strukturalne
  2. Fasada SLF4J i loggery
  3. Logowanie parametryzowane
  4. Konfigurowanie Logback
← Powrót do Java Academy