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 файла:

  • SLF4J обвързващ jar файл
  • Желани 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 от вашето приложение и улеснява замяната му в бъдеще с по-способната библиотека.