Ответ
Да, использовал. Logback — это современный, производительный фреймворк для логирования в Java, созданный как наследник Log4j. Чаще всего используется в связке с фасадом SLF4J, что обеспечивает гибкость и возможность смены реализации.
Ключевые преимущества Logback:
- Высокая производительность и низкие накладные расходы.
- Гибкая конфигурация через XML (
logback.xml) или Groovy. - Автоматическая перезагрузка конфигурации без перезапуска приложения.
- Мощные аппендеры для вывода в файл, консоль, базу данных, Syslog и др.
- Поддержка фильтров и асинхронного логирования (
AsyncAppender).
Пример базовой конфигурации logback.xml:
<configuration>
<!-- Аппендер для записи в файл с ротацией -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>myapp.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>myapp.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- Аппендер для вывода в консоль -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss} %highlight(%-5level) %logger{20} - %msg%n</pattern>
</encoder>
</appender>
<!-- Настройка уровней логирования -->
<root level="INFO">
<appender-ref ref="FILE" />
<appender-ref ref="CONSOLE" />
</root>
<!-- Более детальное логирование для конкретного пакета -->
<logger name="com.mycompany.service" level="DEBUG" />
</configuration>
Использование в коде через SLF4J:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyService {
// Рекомендуется использовать класс, для которого создаётся логгер
private static final Logger log = LoggerFactory.getLogger(MyService.class);
public void processOrder(Order order) {
log.info("Начало обработки заказа ID={}", order.getId());
try {
// бизнес-логика
log.debug("Промежуточное состояние: {}", order.getStatus());
} catch (Exception e) {
log.error("Ошибка при обработке заказа {}: {}", order.getId(), e.getMessage(), e);
}
}
}
Практические фичи:
- Условная обработка (
<if>) в конфигурации. - JMX-конфигуратор для динамического изменения уровня логирования.
- Маркеры (Markers) для расширенной фильтрации и классификации логов.