logo

Log4j kontra SLF4J

SLF4J (prosta fasada rejestrowania dla Java) to interfejs API zaprojektowany w celu zapewnienia ogólnego dostępu do wielu platform rejestrowania, jednym z nich jest log4j.

Jest to w zasadzie warstwa abstrakcji. To nie jest implementacja rejestrowania. Oznacza to, że jeśli piszesz bibliotekę i używasz SLF4J, możesz przekazać tę bibliotekę komuś innemu do użycia, a ona może wybrać, która implementacja rejestrowania ma być używana z SLF4J, np. log4j lub API rejestrowania Java. Służy do zapobiegania uzależnianiu aplikacji od różnych interfejsów API rejestrowania, tak jak korzystają one z zależnych od nich bibliotek.

Jednakże opracowujemy różnicę między Log4J i SLF4J, która zasługuje na tylko jedną odpowiedź liniową. tj. samo pytanie jest błędne. SLF4J i Log4J są różne lub nie są podobnymi komponentami. Jak sama nazwa wskazuje, SLF4J jest prostą fasadą rejestrującą dla Java. Nie jest to komponent rejestrujący i nawet on nie dokonuje faktycznego rejestrowania. Jest to jedynie warstwa abstrakcji dla podstawowego komponentu rejestrowania.

W przypadku Log4j , jest to komponent rejestrujący i wykonuje instrukcje rejestrowania. Możemy więc powiedzieć, że SLF4J i Log4J to logicznie dwie różne rzeczy.

Log4j kontra SLF4J

Teraz wystarczy wybrać, jakiego środowiska rejestrowania chcesz używać w czasie wykonywania. W tym celu będziesz musiał dołączyć dwa pliki jar:

  • Plik jar wiązania SLF4J
  • Żądane pliki jar platformy rejestrowania

Na przykład, aby użyć log4j w swoim projekcie, będziesz musiał dołączyć podane poniżej pliki jar:

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

Po umieszczeniu obu plików jar w ścieżce klas aplikacji, SLF4J automatycznie je wykryje i zacznie używać log4j do przetwarzania instrukcji dziennika w oparciu o konfigurację podaną w pliku konfiguracyjnym log4j.

aes vs des

Na przykład poniższy kod możesz zapisać w pliku klasy projektu:

 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'); } } 

Dlaczego SLF4J jest lepszy od Log4J?

Zawsze trudno jest wybrać jeden pomiędzy SLF4J i Log4j. Jeśli masz wybór, sugeruję; abstrakcja rejestrowania jest zawsze lepsza niż struktura rejestrowania. Jeśli korzystasz z abstrakcji rejestrowania, w szczególności SLF4J, możemy przeprowadzić migrację do dowolnej struktury rejestrowania, której potrzebujemy w momencie wdrożenia, bez konieczności wybierania pojedynczej zależności.

Oto powody, które są wystarczające, aby wybrać SLF4J zamiast Log4j:

  • Zawsze lepiej jest używać abstrakcji.
  • SLF4J to biblioteka typu open source lub biblioteka wewnętrzna, która czyni ją niezależną od konkretnej implementacji rejestrowania, co oznacza brak konieczności zarządzania wieloma konfiguracjami rejestrowania dla wielu bibliotek.
  • SLF4J zapewnia rejestrowanie oparte na symbolach zastępczych, co poprawia czytelność kodu poprzez usunięcie kontroli takich jak isInforEnabled(), isDebugEnabled() itp.
  • Stosując metodę rejestrowania SLF4J, odraczamy koszt tworzenia komunikatów rejestrowania (łańcuch znaków) do czasu, aż będzie to potrzebne, co jest efektywne zarówno pod względem procesora, jak i pamięci.
  • Ponieważ SLF4J używa mniejszej liczby ciągów tymczasowych, oznacza to mniej pracy modułu zbierającego elementy bezużyteczne, co oznacza lepszą przepustowość i wydajność aplikacji.

Zasadniczo SLF4J nie zastępuje log4j; oboje pracują razem. Usuwa zależność aplikacji od log4j i ułatwia zastąpienie jej w przyszłości bardziej wydajną biblioteką.