logo

Log4j проти SLF4J

SLF4J (Простий фасад журналювання для java) це API, призначений для надання загального доступу до багатьох фреймворків журналювання, одним із яких є log4j.

В основному це шар абстракції. Це не реалізація журналювання. Це означає, що якщо ви пишете бібліотеку та використовуєте SLF4J, ви можете передати цю бібліотеку комусь іншому для використання, і вони зможуть вибрати, яку реалізацію журналювання використовувати з SLF4J, наприклад, log4j або Java logging API. Він використовується для запобігання залежності додатків від різних API журналювання так само, як вони використовують бібліотеки, які залежать від них.

Однак ми детально пояснюємо різницю між Log4J і SLF4J, яка заслуговує на відповідь лише в один рядок. тобто саме питання неправильне. SLF4J і Log4J відрізняються або не є схожими компонентами. Як зазначено в назві, SLF4J є простим фасадом журналювання для Java. Це не компонент журналювання, і навіть він не виконує фактичне журналювання. Це лише рівень абстракції базового компонента журналювання.

У випадку Log4j , це компонент журналювання, і він веде журналювання, яке потрібно виконати. Таким чином, ми можемо сказати, що SLF4J і Log4J логічно дві різні речі.

Log4j проти SLF4J

Тепер все, що вам потрібно вибрати, яку структуру журналювання потрібно використовувати під час виконання. Для цього вам потрібно буде включити два файли jar:

  • JAR-файл зв’язування SLF4J
  • Бажані jar-файли фреймворку журналювання

Наприклад, щоб використовувати log4j у вашому проекті, вам потрібно буде включити наведені нижче файли jar:

  • slf4j-log4j12-1.7.12.jar
  • log4j-1.2.17.jar

Після того як ви розмістите обидва файли jar у шлях до класів програми, SLF4J автоматично виявить це та почне використовувати log4j для обробки операторів журналу на основі конфігурації, яку ви надали у файлі конфігурації log4j.

Наприклад, наведений нижче код можна записати у файл класу проекту:

 import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class HelloWorld { public static void main(String[] args) { Logger logger = LoggerFactory.getLogger(HelloWorld.class); logger.info('Hello World'); } } 

Чому SLF4J кращий ніж Log4J?

Завжди важко віддати перевагу одному між SLF4J і Log4j. Якщо у вас є вибір, я б запропонував вам; абстракція журналювання завжди краща, ніж структура журналювання. Якщо ви використовуєте абстракцію журналювання, зокрема SLF4J, ми можемо перейти на будь-яку структуру журналювання, яка нам потрібна на момент розгортання, не вибираючи одну залежність.

Нижче наведено причини, які є достатньо вагомими, щоб вибрати SLF4J замість Log4j:

  • Завжди краще використовувати абстракцію.
  • SLF4J — це бібліотека з відкритим кодом або внутрішня бібліотека, яка робить її незалежною від будь-якої конкретної реалізації журналювання, що означає відсутність необхідності керувати декількома конфігураціями журналювання для кількох бібліотек.
  • SLF4J забезпечує журналювання на основі заповнювачів, що покращує читабельність коду, видаляючи перевірки, такі як isInforEnabled(), isDebugEnabled() тощо.
  • Використовуючи метод журналювання SLF4J, ми відкладаємо витрати на створення повідомлень журналу (рядок), доки вам це не знадобиться, що є ефективним як для ЦП, так і для пам’яті.
  • Оскільки SLF4J використовує меншу кількість тимчасових рядків, це означає менше роботи для збирача сміття, що означає кращу пропускну здатність і продуктивність для вашої програми.

Отже, по суті, SLF4J не замінює log4j; вони обидва працюють разом. Це усуває залежність від log4j із вашої програми та дозволяє легко замінити її в майбутньому на більш потужну бібліотеку.