Jedes Framework in verschiedenen von Java (z. B. Feder usw.) erzeugten Frameworks verwendet verschiedene Protokollsysteme. Es wird bestimmte Probleme beim Mischen mehrerer verschiedener Protokolle in einem JVM geben. Hier sortieren wir die gängigen Protokoll -Frameworks im Java -System, stellen die Beziehung zu jedem auf SFL4J zentrierten Protokoll -Framework ein und führen vor, wie verschiedene Protokoll -Frameworks in der Produktionsumgebung verwaltet werden.
1. Einführung in die Schnittstelle
Im Java-System gibt es hauptsächlich zwei Schnittstellen des Protokollsystems: SLF4J und Common Logging. Es gibt viele Frameworks zu implementieren, wie z. B. Logback, Log4j usw.
Obwohl beide Schnittstellen sind, können die beiden auch die Ausgabe von Bridge -Paketen für die gegenseitige Protokollprotokolle erzielen.
Die Protokollimplementierung von Common-Logging Montod ist häufig log4j. Während der Initialisierung wird es in der obigen Reihenfolge automatisch instanziiert, wenn es keine spezielle Spezifikation dafür gibt, wer montiert werden soll. Log4JLogger verkauft den Logger von Log4j und ruft log4j beim Drucken von Protokollen auf.
2. Brücke und in SLF4J überbrückt werden
Als Schnittstellendefinition kann SLF4J am Ende viele Implementierungsrahmen haben und auch andere Protokollimplementierungen oder Frameworks für SFL4J unterstützen. Die Implementierung basiert auf verschiedenen Brückenpaketen.
2.1 SLF4J -Brücke
Als Schnittstellendefinition finden Sie nachstehend viele Implementierungen. Das Implementierungsprinzip besteht darin, die Initialisierung beim Erhalten von IloGGerFactory durchzuführen. Der Initialisierungsprozess bindet das Implementierungsobjekt: Laden Sie alle Klassen, die staticLoggerbinder implementieren, und erhalten dann seinen Singleton. Bei der Ausführung von getLogger wird die Methode dieser Singleton -Klasse aufgerufen, um das entsprechende Logger -Objekt mit spezifischer Implementierung von Protokollierungsfunktionen zu erhalten. Wenn es mehrere Implementierungen gibt, binden Sie einen von ihnen. Diese Situation erfordert die Entfernung unerwünschter Log -Implementierungsklassen.
2.2 SLF4J ist überbrückt
Die obige Abbildung zeigt, wie andere Protokollsysteme mit dem SLF4J -Protokollsystem verbunden sind. Das Grundprinzip besteht darin, ihre jeweiligen Protokollsysteme zu steigern und sie an die SFL4J -Schnittstelle auszugeben. Für bestimmte Implementierungen können Sie die Implementierung des Brückenpakets sehen. Grundsätzlich wurde die ursprüngliche Protokollimplementierung neu implementiert, und die zugrunde liegende Methode zum tatsächlichen Aufruf von Protokollausgaben für SLF4J.
Nur JUL ist eine Ausnahme, da Java mit der JDK-Implementierung ausgestattet ist und es unmöglich ist, diese Klassen wieder zu entlasten. Dieser Ort implementiert einen SLF4J -Handler basierend auf dem Jul -Handler -Erweiterungsmechanismus und schreibt dann das Protokoll an SLF4J. Um wirksam zu werden, müssen Sie auch jre/lib/logging.properties ändern, um den neuen Handler in der Eigenschaft. Im Allgemeinen wird die Produktion nicht so erfolgen.
2.3 Anwendung
Achten Sie bei der Anwendung tatsächlicher Projekte darauf, dass das überbrückte und überbrückte Paket nicht gleichzeitig angezeigt wird, da sonst eine tote Schleife auftritt. Zum Beispiel verweist SFL4J sowohl log4j als auch log4j, der Ausgangsaufruf von LOG4J zeigt auf SLF4J, und SLF4J zeigt in dieser Schleife auf log4j. Stellen Sie sicher, dass Sie nutzlose Pakete beseitigen.
Produktionsvorschläge: Die Implementierung von SLF4J-API-montiert behält nur einen Logback, und die obere Protokolldruckbrücke kann alle auf SLF4J zeigen.
Siehe folgende Abhängigkeiten, und alle anderen Protokollpakete sind ausgeschlossen:
<dependencies> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.24</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.1</version> </dependency> <Depepentcy> <gruppe> org.slf4j </GroupId> <artifactID> jcl-over-slf4j </artifactId> <version> 1.7.14 </Version> </abhängig> <abhängigkeit> <Grups-org. </abhängig> <abhängigkeit> <gruppe> org.slf4j </Groupid> <artifactId> JUL-to-SLF4J </artifactid> <version> 1.7.7 </Version> </abhängig> </abhängig
3. Implementierung und POM Testcode
Testcode
public class testloggers { / ** * SLF4J-API-> SLF4J-log4j12-> log4j * / public void testsfl4jUplog4J () {org.slf4j.logger logger = loggerfactory.getlogger (testloggers.class.class.class.class.class.classname ()); logger.info ("slf4j drucken verwenden log4j"); } / ** * SLF4J-API-> SLF4J-JCL-> Common-Logging-api (automatisch an log4j)-> log4j * / public void testslf4j2CommonLogging () {org.slf4j.Logger logger = loggerfactory.getlogger (testlogger (testlogger) (testlogger (testlogger) (testlogger.); logger.warn ("SLF4J -Druck auf gemeinsame Protokollierung"); } / ** * log4j-over-slf4j-api-> logback-klassic * / public void testlog4j2slf4j () {org.apache.log4j.logger logger = org.apache.log4j.logger.getlogger (testloggers.class.class.class.getname ()); logger.info ("log4j druck zu slf4j"); } / ** * jcl-over-slf4j-> sfl4-api-> logback * / public void testCommonLogging2Sl4j () {log log = logfactory.getLog (testloggers.class.getname ()); log.info ("gemeinsames Protokoll für SLF4J"); }/** * JUL (Konsole-Standard)-> JUL-to-SLF4J-> SLF4J-> Logback * Hinzufügen von org.slf4j.bridge.slf4jBridgeHandler in jre/lib/logging.properties */public void testjul2slf4j () {java.util.util.util.util.util.util.util.util.Logging.Loggers Logger = Logger = Loggers Logger = java.util.logging.logger.getLogger (testloggers.class.getname ()); logger.info ("jul drucken auf SLF4J"); } public static void main (String [] args) {TestLoggers tester = new TestLoggers (); tester.TestSlf4j2Commonlogging (); }}Testen Sie Maven -Abhängigkeiten
<Depelencies> <Deponcy> <GroupId> org.slf4j </GroupId> <artifactId> SLF4J-API </artifactId> <version> 1.7.24 </Version> </abhängig> <Depopentcy> <gruppeId> commons-logging </GroupId> <artifactid> commons-Logging-APIGGing-APICGGing-APIGIGGING-APIGIGGING-APIGIGGING-APIGIGGING-APIGIGGE-APIGIGGE-APIGIGGING-APIGIGGING-APIGIGGING. <!-<De vorstellen>-> <!-<gruppeId> org.slf4j </Groupid>-> <!-<artifactid> jcl-over-slf4j </artifactId>-> <!-<version> 1.7.14 </Version>-<! <artifactId> log4j-over-SLF4J </artifactId> <version> 1.7.24 </Version> </abhängig> <!-<abhängigkeit>-> <!-<gruppeId> org.slf4j </gruppeninternen>-> <! <!-</abhängig>-> <!-<De vorstellen>-> <!-<gruppe> ch.qos.logback </Groupid>-> <!-<artifactid> logback-clasc </artifactID>-> <!-<version> 1.2.1 </Version>-> <! <!--<groupId>org.slf4j</groupId>--> <!--<artifactId>slf4j-log4j12</artifactId>--> <!--<version>1.7.5</version>--> <!--</dependency>--> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version> 1.2.17 </version> </abhängig> <depeopy> <gruppe> org.slf4j </Groupid> <artifactId> slf4j-jcl </artifactid> <version> 1.7.24 </Version> </abhängig> </abhängig>
In dem obigen Artikel wird kurz die Verwendung der SLF4J -Kompatibilität mit anderen Protokollsystemen erörtert, die ich mit Ihnen teile. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.