Зачем нужны SLF4J и Commons Loggin

SLF4J и Commons Loggin предназначены для одной цели - легко сменить библиотеку для логинга.
Существуен некоторое количество библиотек : JDK logging utils, log4j, Logback, x4juli, Simple Log.
С помощью SLF4J и Commons Loggin легко переклчаться о содной библиотеки на другую Эти библиотеки предоставляют общий API и перенаправляют сообщения в зависимости от выбранного фреймвока (фасад для логирования).

Часто меня спрашивают зачем нужно поддерживать в одном проекте много фреймворков - достаточно выбрать один и им пользоваться. Менять же не зачем.

Это утверждение справедливо если вы пишите проект для конечного пользователя. Если вы пишите библиотеку то конечный фреймворк будет выбирать другой программист - который использует эту библиотеку. Причём если в проекте есть библиотеки которые логируют в log4j и в JDK logging utils напрямую то тогда придётся конфигурировать и log4j и JDK logging utils.

Тоесть:
Eсли вы пишите конечный продукт - выбирайте либо log4j либо JDK logging utils.
Eсли пишите пишете библиотеку которая будет применяться в разных проектах используйте slf4j.

Кроме того следует заметить что JDK logging utils, log4j и Commons Logging - библиотеки довольно старые - они появились ещё до jdk 1.5. SLF4J - довольно новая библиотека. Поэтому в ней исправлены недостатки и подводные камни более старых библиотек:

  • Параметризованные сообщения
  • Проблема с заргузчиком классов
  • Маркерные объекты
  • info(exception)
  • repository selector http://www.qos.ch/logging/sc.jsp
  • конфигурация по умолчанию