Вперед: програмуйте на log4j2 API замість 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 повідомлення
- Лямбди для ледачих лісозаготівель
- Введіть будь-який об’єкт, а не лише рядки
- Без сміття: уникайте створення вараг або створення рядків, де це можливо
- CloseableThreadContext автоматично видаляє елементи з MDC, коли ви закінчите з ними
(Докладніше див. 10 функцій API Log4j2, недоступних у SLF4J .)
Програми можуть безпечно використовувати ці багатофункціональні можливості Log4j2 API, не замикаючись на початковій реалізації ядра Log4j2.
SLF4J все ще є вашим запобіжним клапаном, це просто не означає, що ваша програма більше не має коду проти API SLF4J.
Розкриття інформації: Я вношу свій внесок у Log4j2.
Оновлення: Мабуть, існує деяка плутанина, що програмування до Log4j2 API якимось чином вводить "фасад для фасаду". У цьому відношенні між API Log4j2 та SLF4J немає різниці.
Обидва API вимагають 2 залежності при використанні нативного втілення та 4 залежності для ненормативної реалізації. У цьому відношенні SLF4J та API Log4j2 однакові. Наприклад:
slf4j
і реєстрацію (або log4jv1)? Чи потрібно мені потім змусити встановити третій реєстратор, щоб використовувати ваш додаток? А може корпоративна безпека вирішує, що ви можете використовувати лишеjava.util.logging
у виробництві, що тоді?