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.
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ą.