Подтвердить что ты не робот

Стоит ли использовать slf4j с log4j2

Я не могу решить, использовать ли slf4j или нет с log4j2. Основываясь на онлайн-сообщениях, похоже, что у него не будет какой-либо производительности, но это действительно необходимо.

Также эти точки правят в пользу log4j2:

  • SLF4J заставляет ваше приложение регистрировать строки. API Log4j 2 поддерживает ведение журнала любого CharSequence, если вы хотите регистрировать текст, но также поддерживает ведение журнала любого объекта как есть.
  • API Log4j 2 предлагает поддержку для журналирования объектов сообщений, ямбда-выражений Java 8 и бесполезной регистрации (это позволяет избежать создания массивов vararg и избегать создания строк при регистрации объектов CharSequence).
4b9b3361

Ответ 1

Далее: программа для API log4j2 вместо slf4j

Это безопасно: API Log4j2 предлагает те же гарантии, что и slf4j - и многое другое.

Теперь, когда сам Log4j2 разделен на API и модуль реализации, в использовании SLF4J больше нет значения.

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

В течение последних 10 лет создание такой гибкости в вашем приложении означало использование API-интерфейса оболочки, такого как SLF4J. Однако эта гибкость не возникает бесплатно: недостатком этого подхода является то, что ваше приложение не может использовать более богатый набор функций базовой библиотеки журналов.

Log4j2 предлагает решение, которое не требует, чтобы ваше приложение ограничивалось наименьшим общим знаменателем.

Выходной клапан: log4j-to-slf4j

Log4j2 включает модуль моста log4j-to-slf4j. Любое приложение, закодированное в отношении API Log4j2, может в любой момент переключить реализацию резервного копирования на любую совместимую с slf4j реализацию.

log4j-to-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 идентичны в этом отношении. Например:

Необходимые зависимости аналогичны для SLF4J и Log4j 2 API