Ответ 1
Далее: программа для API log4j2 вместо slf4j
Это безопасно: API Log4j2 предлагает те же гарантии, что и slf4j - и многое другое.
Теперь, когда сам Log4j2 разделен на API и модуль реализации, в использовании SLF4J больше нет значения.
Да, это хорошая инженерная практика, чтобы ваши варианты открывались. Возможно, вам захочется перейти на другую реализацию регистрации позже.
В течение последних 10 лет создание такой гибкости в вашем приложении означало использование API-интерфейса оболочки, такого как SLF4J. Однако эта гибкость не возникает бесплатно: недостатком этого подхода является то, что ваше приложение не может использовать более богатый набор функций базовой библиотеки журналов.
Log4j2 предлагает решение, которое не требует, чтобы ваше приложение ограничивалось наименьшим общим знаменателем.
Выходной клапан: log4j-to-slf4j
Log4j2 включает модуль моста log4j-to-slf4j
. Любое приложение, закодированное в отношении API Log4j2, может в любой момент переключить реализацию резервного копирования на любую совместимую с slf4j реализацию.
Как уже упоминалось в вопросе, использование API Log4j2 напрямую предлагает больше функциональности и имеет некоторые нефункциональные преимущества по сравнению с использованием API-интерфейса оболочки, такого как slf4j:
- API сообщений
- Lambdas для ленивого ведения журнала
- Запишите любой объект вместо строк.
- Без мусора: избегайте создания varargs или создания Strings, где это возможно.
- CloseableThreadContext автоматически удаляет элементы из MDC, когда вы закончите с ними.
(Подробнее см. 10 функций API Log4j2, недоступных в SLF4J.)
Приложения могут безопасно использовать эти богатые функции API Log4j2, не будучи запертыми в основной реализации Log4j2.
SLF4J по-прежнему является вашим предохранительным клапаном, это просто не означает, что ваше приложение должно кодировать API SLF4J.
Отказ от ответственности: я вношу свой вклад в Log4j2.
Обновление. Кажется, есть некоторая путаница в том, что программирование в Log4j2 API каким-то образом вводит "фасад для фасада". В этом отношении нет разницы между API Log4j2 и SLF4J.
Оба API требуют 2 зависимостей при использовании собственной реализации и 4 зависимостей для неместной реализации. SLF4J и API Log4j2 идентичны в этом отношении. Например: