junior
Какие существуют фреймворки логирования в Java?
В экосистеме Java исторически сложилось несколько фреймворков логирования, которые делятся на фасады (API) и реализации.
Эволюция логирования в Java
| Год | Фреймворк | Тип | Описание | Статус в 2026 |
|---|---|---|---|---|
| 2001 | Log4j 1.x | Реализация | Первый популярный фреймворк | EOL с 2015, не использовать |
| 2002 | java.util.logging (JUL) | Реализация | Встроен в JDK | Legacy, мелкие утилиты |
| 2004 | Commons Logging (JCL) | Фасад | Фасад от Apache | Legacy, заменён SLF4J |
| 2005 | SLF4J | Фасад | Современный фасад | Стандарт де-факто |
| 2006 | Logback | Реализация | Нативная реализация SLF4J | Стандарт (Spring Boot default) |
| 2014 | Log4j 2.x | Реализация | Полная переработка Log4j | Актуален, async через LMAX Disruptor |
Что использовать в 2026
Пример
Рекомендуемый стек: SLF4J API + Logback (Spring Boot по умолчанию)
Альтернатива: SLF4J API + Log4j 2.x (для высоконагруженных систем с async logging)
SLF4J — всегда API, конкретный фреймворк — деталь реализации.
Log4j 2.x vs Logback
| Критерий | Logback | Log4j 2.x |
|---|---|---|
| Async logging | AsyncAppender (BlockingQueue) | LMAX Disruptor (lock-free, быстрее) |
| API | SLF4J (нативно) | Свой + SLF4J bridge |
| Spring Boot | По умолчанию | Через starter-log4j2 |
| Lambda support | Нет | Да: log.debug(() -> expensiveOp()) |
| GraalVM Native Image | Ограниченная совместимость | Поддерживается лучше |
Частые ошибки
- Путать Log4j 1.x и Log4j 2.x — это разные проекты с разными API и зависимостями
- Использовать Log4j 1.x — EOL, без обновлений безопасности
- Прямой импорт Logback API — используйте SLF4J для переносимости
- Уязвимость Log4Shell (CVE-2021-44228) была в Log4j 2.x (исправлена в 2.17+), не в Logback
Как используется в 2026
- 90%+ Spring Boot проектов — SLF4J + Logback (дефолт)
- Высоконагруженные системы — рассматривают Log4j 2.x с Async Loggers
- GraalVM Native Image — Log4j 2.x или JUL (Logback не полностью совместим из коробки)
На собеседовании: покажите знание эволюции: Log4j 1.x (EOL) -> SLF4J + Logback (стандарт) -> Log4j 2.x (альтернатива для async). Частая ошибка — путать Log4j 1.x и Log4j 2.x или не знать про Log4Shell.