logo

Log4j vs. SLF4J

SLF4J (Simple Logging Fa�ade für Java) ist eine API, die entwickelt wurde, um generischen Zugriff auf viele Protokollierungs-Frameworks zu ermöglichen, darunter auch log4j.

Es handelt sich im Grunde um eine Abstraktionsschicht. Es handelt sich nicht um eine Protokollierungsimplementierung. Das heißt, wenn Sie eine Bibliothek schreiben und SLF4J verwenden, können Sie diese Bibliothek jemand anderem zur Verwendung geben und dieser kann auswählen, welche Protokollierungsimplementierung mit SLF4J verwendet werden soll, z. B. log4j oder die Java-Protokollierungs-API. Es wird verwendet, um zu verhindern, dass Anwendungen von unterschiedlichen Protokollierungs-APIs abhängig sind, genauso wie sie von diesen abhängige Bibliotheken verwenden.

Listenknoten

Wir erläutern jedoch den Unterschied zwischen Log4J und SLF4J, der nur eine Antwortzeile verdient. d.h. die Frage selbst ist falsch. SLF4J und Log4J sind unterschiedlich oder keine ähnlichen Komponenten. Wie der Name schon sagt, ist SLF4J eine einfache Protokollierungsoberfläche für Java. Es ist keine Protokollierungskomponente und übernimmt auch nicht die eigentliche Protokollierung. Es handelt sich lediglich um eine Abstraktionsschicht für eine zugrunde liegende Protokollierungskomponente.

Im Fall von Log4j , es handelt sich um eine Protokollierungskomponente, die die Protokollierung durchführt, die sie ausführen soll. Wir können also sagen, dass SLF4J und Log4J logischerweise zwei verschiedene Dinge sind.

Log4j vs. SLF4J

Jetzt müssen Sie nur noch auswählen, welches Logging-Framework Sie zur Laufzeit verwenden möchten. Dazu müssen Sie zwei JAR-Dateien einbinden:

  • SLF4J-Bindungs-JAR-Datei
  • Gewünschte JAR-Dateien des Protokollierungsframeworks

Um beispielsweise log4j in Ihrem Projekt zu verwenden, müssen Sie die folgenden JAR-Dateien einbinden:

In welchem ​​Jahr wurde der Computer erfunden?
  • slf4j-log4j12-1.7.12.jar
  • log4j-1.2.17.jar

Sobald Sie beide JAR-Dateien im Klassenpfad Ihrer Anwendung abgelegt haben, erkennt SLF4J sie automatisch und beginnt mit der Verwendung von log4j zur Verarbeitung der Protokollanweisungen basierend auf der Konfiguration, die Sie in der log4j-Konfigurationsdatei angegeben haben.

Den folgenden Code können Sie beispielsweise in Ihre Projektklassendatei schreiben:

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

Warum ist SLF4J besser als Log4J?

Es ist immer schwierig, zwischen SLF4J und Log4j den Vorzug zu geben. Wenn Sie die Wahl haben, würde ich Sie vorschlagen; Die Protokollierungsabstraktion ist dem Protokollierungsframework immer vorzuziehen. Wenn Sie eine Protokollierungsabstraktion, insbesondere SLF4J, verwenden, können wir zu jedem Protokollierungsframework migrieren, das wir zum Zeitpunkt der Bereitstellung benötigen, ohne uns für eine einzelne Abhängigkeit zu entscheiden.

Im Folgenden sind die Gründe aufgeführt, die ausreichen, um SLF4J gegenüber Log4j zu wählen:

  • Es ist immer besser, Abstraktion zu verwenden.
  • SLF4J ist eine Open-Source-Bibliothek oder interne Bibliothek, die es unabhängig von einer bestimmten Protokollierungsimplementierung macht, was bedeutet, dass nicht mehrere Protokollierungskonfigurationen für mehrere Bibliotheken verwaltet werden müssen.
  • SLF4J bietet eine platzhalterbasierte Protokollierung, die die Lesbarkeit des Codes verbessert, indem Prüfungen wie isInforEnabled(), isDebugEnabled() usw. entfernt werden.
  • Durch die Verwendung der Protokollierungsmethode von SLF4J verschieben wir die Kosten für die Erstellung von Protokollierungsnachrichten (Strings) bis Sie diese benötigen, was sowohl CPU- als auch Speichereffizient ist.
  • Da SLF4J weniger temporäre Zeichenfolgen verwendet, bedeutet dies weniger Arbeit für den Garbage Collector, was einen besseren Durchsatz und eine bessere Leistung für Ihre Anwendung bedeutet.

SLF4J ersetzt also im Wesentlichen nicht log4j; beide arbeiten zusammen. Es beseitigt die Abhängigkeit von log4j aus Ihrer Anwendung und erleichtert den künftigen Ersatz durch die leistungsfähigere Bibliothek.