0Pricing
Java Academy · Урок

Настройка Logback

Аппендеры, шаблоны и уровни

«Настройка Logback» — бесплатный урок Java Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Java Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Java Academy содержит 4 уроков всего.

Что такое Logback?

Logback — популярная реализация SLF4J, написанная тем же автором, что и Log4j. Именно она выполняет журналирование, которое описывается вызовами SLF4J.

Её настраивают с помощью файла logback.xml в пути классов, обычно в каталоге 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");
    }
}

Три строительных блока

Конфигурация Logback опирается на три основных понятия:

  • Logger: именованный источник событий журнала с определённым уровнем.
  • Приёмник: место назначения (консоль или файл).
  • Кодировщик/формат: преобразует событие в текст.
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");
    }
}

Приёмник консоли

Самая простая конфигурация отправляет всё в консоль. Шаблон кодировщика определяет формат строки.

Этот XML находится в logback.xml, а не в Вашем коде 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>

Понимание шаблона

Слова преобразования в шаблоне начинаются с %:

  • %d — отметка времени, %level — уровень.
  • %logger — имя регистратора, %thread — поток.
  • %msg — Ваше сообщение, %n — перевод строки.

%-5level дополняет уровень слева до ширины 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");
    }
}

Корневой регистратор и уровни

Элемент <root> задаёт уровень по умолчанию для всего приложения и приёмники, в которые оно выполняет запись.

Установка level="info" означает, что выводятся INFO, WARN и ERROR, а DEBUG и TRACE подавляются.

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

Уровни для отдельных пакетов

Добавьте элемент <logger>, чтобы переопределить уровень для пакета. Это позволяет включить DEBUG для собственного кода, сохранив библиотеки без лишнего вывода.

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

Приёмник с ротацией файлов

В рабочей среде обычно выполняют запись в файлы, которые сменяются ежедневно или при достижении определённого размера, чтобы журналы не росли бесконечно.

RollingFileAppender с политикой, основанной на времени, создаёт отдельный файл на каждый день и хранит ограниченную историю.

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

Несколько приёмников одновременно

Корневой регистратор может ссылаться на несколько приёмников, поэтому записи одновременно отправляются и в консоль, и в файл.

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

Вывод MDC

Чтобы включать контекст MDC, например идентификатор запроса, в каждую строку, добавьте %X{key} в шаблон.

После этого любое значение, помещённое в MDC, будет появляться автоматически.

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

Аддитивность

По умолчанию события регистратора также передаются приёмникам его предков. Это называется аддитивностью.

Если у регистратора пакета есть собственный приёмник и Вы не хотите получать дублирующийся вывод, задайте для него 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>

Автоматическая перезагрузка и переменные

Logback может периодически перезагружать конфигурацию с помощью <configuration scan="true">, что удобно для изменения уровней без перезапуска.

Также можно считывать свойства, например каталог журналов, с помощью заполнителей ${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>

Быстрая проверка

Проверьте свои знания о конфигурации Logback.

Итоги

Вы научились настраивать Logback:

  • Конфигурация хранится в logback.xml и содержит регистраторы, приёмники и кодировщики.
  • Шаблоны форматируют строки с помощью %d, %level, %msg, %X{}.
  • RollingFileAppender выполняет ротацию журналов; задавайте уровни для отдельных пакетов и аддитивность.
  • Включайте scan для перенастройки без остановки приложения.

Вы завершили курс по журналированию.

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

Часто задаваемые вопросы

Урок «Настройка Logback» бесплатный?

Да — полный текст урока «Настройка Logback» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Java Academy, подпишись на CoddyKit PRO. Курс Java Academy содержит 4 уроков всего.

Чему я научусь в уроке «Настройка Logback»?

Аппендеры, шаблоны и уровни Ты практикуешь Java Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Java Academy?

Предыдущий опыт не требуется. Java Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Настройка Logback»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Java Academy?

Да. Каждый урок Java Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Зачем нужна структурированная регистрация
  2. Фасад SLF4J и регистраторы
  3. Параметризованная регистрация
  4. Настройка Logback
← Назад к Java Academy