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 %:
%doznacza znacznik czasu, a%level— poziom.%loggeroznacza nazwę loggera, a%thread— wątek.%msgoznacza 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.xmli obejmuje loggery, appendery oraz enkodery. - Wzorce formatują wiersze za pomocą
%d,%level,%msgi%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
- Dlaczego logowanie strukturalne
- Fasada SLF4J i loggery
- Logowanie parametryzowane
- Konfigurowanie Logback