Fahren Sie fort: Programmieren Sie auf die log4j2-API anstelle von slf4j
Es ist sicher: Die Log4j2-API bietet genau die gleichen Garantien wie slf4j - und mehr.
Nachdem Log4j2 selbst in eine API und ein Implementierungsmodul unterteilt ist, hat die Verwendung von SLF4J keinen Wert mehr.
Ja, es ist eine gute technische Praxis, Ihre Optionen offen zu halten. Möglicherweise möchten Sie später zu einer anderen Protokollierungsimplementierung wechseln.
In den letzten 10 Jahren bedeutete der Aufbau einer solchen Flexibilität in Ihrer Anwendung die Verwendung einer Wrapper-API wie SLF4J. Diese Flexibilität ist jedoch nicht kostenlos: Der Nachteil dieses Ansatzes besteht darin, dass Ihre Anwendung den umfangreicheren Funktionsumfang der zugrunde liegenden Protokollierungsbibliothek nicht verwenden kann.
Log4j2 bietet eine Lösung, bei der Ihre Anwendung nicht auf den kleinsten gemeinsamen Nenner beschränkt sein muss.
Das Auslassventil: log4j-to-slf4j
Log4j2 enthält ein log4j-to-slf4j
Brückenmodul. Jede Anwendung, die gegen die Log4j2-API codiert ist, kann jederzeit die Sicherungsimplementierung auf eine slf4j-kompatible Implementierung umstellen.
Wie in der Frage erwähnt, bietet die Verwendung der Log4j2-API direkt mehr Funktionalität und hat einige nicht funktionale Vorteile gegenüber der Verwendung einer Wrapper-API wie slf4j:
- Nachrichten-API
- Lambdas für faulen Holzeinschlag
- Protokollieren Sie jedes Objekt anstatt nur Zeichenfolgen
- Müllfrei: Vermeiden Sie nach Möglichkeit das Erstellen von Varargs oder Strings
- CloseableThreadContext entfernt automatisch Elemente aus dem MDC, wenn Sie damit fertig sind
(Weitere Informationen finden Sie unter 10 Log4j2-API-Funktionen, die in SLF4J nicht verfügbar sind .)
Anwendungen können diese umfangreichen Funktionen der Log4j2-API sicher verwenden, ohne an die native Log4j2-Kernimplementierung gebunden zu sein.
SLF4J ist immer noch Ihr Sicherheitsventil. Es bedeutet nur nicht, dass Ihre Anwendung mehr gegen die SLF4J-API codieren sollte.
Offenlegung: Ich trage zu Log4j2 bei.
Update: Es scheint einige Verwirrung zu geben, dass die Programmierung auf die Log4j2-API irgendwie eine "Fassade für eine Fassade" einführt. In dieser Hinsicht gibt es keinen Unterschied zwischen der Log4j2-API und SLF4J.
Beide APIs erfordern 2 Abhängigkeiten bei Verwendung einer nativen Implementierung und 4 Abhängigkeiten bei einer nicht nativen Implementierung. SLF4J und die Log4j2-API sind in dieser Hinsicht identisch. Beispielsweise:
slf4j
Logback (oder log4jv1) enthält? Sollte ich dann gezwungen sein, einen dritten Logger zu installieren, um Ihre Anwendung zu verwenden? Oder vielleicht entscheidet die Unternehmenssicherheit, dass Sie sie nurjava.util.logging
in der Produktion verwenden dürfen. Was dann?