In diesem Artikel wird hauptsächlich die Konfiguration von SLF4J+Logback in Java Engineering vorgestellt.
Vor der Einführung der SLF4J+-Logback -Konfiguration führen Sie zunächst den Logback -Logback der Protokollkomponente ein.
(1) Die Einführung und Konfiguration des Protokollkomponenten -Logbacks
1. Einführung in den Logback
Der Logback ist eine weitere Open -Source -Protokollkomponente, die vom Gründer von LOG4J entworfen wurde. Der Logback ist derzeit in drei Module unterteilt: Logback-Core, Logback-Classic und Logback-Aktivität. Logback-Core ist das grundlegende Modul der beiden anderen Module. Die Logback-Klasse ist eine verbesserte Version von Log4J. Darüber hinaus implementiert die Logback-Klasse die SLF4J-API vollständig, sodass Sie sie leicht durch andere Protokollierungssysteme wie Log4j oder JDK14-Protokollierung ersetzen können. Das Logback-Access-Zugriffsmodul integriert in Servlet-Container, um die Funktion des Zugriffs auf Protokolle über http bereitzustellen. Der Logback ist die offizielle Website, die zwei Komponenten mit SLF4J wie folgt kombiniert:
Offizielle Website des Logback: http://logback.qos.ch
Offizielle Website von SLF4J: http://www.slf4j.org
Die in diesem Artikel verwendeten Komponenten sind wie folgt: Bitte besuchen Sie die offizielle Website, um herunterzuladen!
Logback -Access -.0.0.jar
Logback -Klasse -.0.0.jar
Logback-Core-1.0.0.jar
SLF4J-API-1.6.0.jar
2. Gründe für den Logback zum Ersetzen von LOG4J:
Logback und Log4J sind sehr ähnlich. Hier sind einige Vorteile von Logback gegenüber LOG4J:
1. Schnellere implementieren Sie das Kernel -Umschreiben des Logbacks, und die Leistung steigt auf einigen wichtigen Ausführungspfaden um mehr als zehnmal. Darüber hinaus verbessert der Logback nicht nur die Leistung, sondern hat auch weniger initialisierte Speicherlasten.
2. Sehr vollständiger Test -Logback wurde seit einigen Jahren und unzähligen Stunden getestet. Der Test des Logback ist völlig anders. Aus Sicht des Autors ist dies ein einfacher und wichtiger Grund, Logback anstelle von log4j zu wählen.
3. Die Logback-Klasse wird natürlich mit SLF4J-Logback-Klasse implementiert, um SLF4J zu erreichen. Bei der Verwendung von SLF4J können Sie sich keine Logback-Klasse fühlen. Da die Logback-Klasse SLF4J ganz natürlich implementiert, ist es sehr einfach, auf Log4j oder andere zu wechseln.
4. Die offizielle Website des Sehr umfassenden Dokuments verfügt über mehr als 200 Seiten mit Dokumenten.
5. Die Konfigurationsdatei automatisch als Änderung der Konfigurationsdatei neu laden, kann die Logback-Klasse die Konfigurationsdatei automatisch neu laden. Der Abtastvorgang ist schnell und sicher und muss keinen anderen Scan -Thread erstellen. Diese Technologie garantiert vollständig, dass die Anwendung in der JEE -Umgebung ausgeführt werden kann.
6. Lilith Lilith ist ein Beobachter des logarithmischen Vorfalls, ähnlich der Kettensäge von log4j. Lilith kann auch große Mengen an Protokolldaten verarbeiten.
7. VORSICHT MODE und sehr freundliche Wiederherstellung im Warnmodus, mehrere FileAppender -Instanzen werden unter mehreren JVMs ausgeführt und können die gleiche Protokolldatei sicher schreiben. RollingFileAppender wird einige Einschränkungen haben. Der FileAppender von Logback und seine Unterklassen einschließlich RollingFileAppender können sich von sehr freundlichen E/A -Ausnahmen erholen.
8. Konfigurationsdateien können verschiedene Situationen verarbeiten. Diese Konfigurationsdateien sind nur geringe Unterschiede, die implementiert und implementiert werden können, sodass sich eine Konfigurationsdatei an mehrere Umgebungen anpassen kann.
9. Filter (Filter) Manchmal ist ein Problem erforderlich und ein Protokoll benötigt. In log4J wird nur die Protokollebene reduziert, dies wird jedoch viele Protokolle und die Anwendungsleistung beeinflussen. Bei Logback können Sie diese Protokollebene weiterhin beibehalten und einige spezielle Fälle entfernen. Um diese Funktion zu erreichen, müssen Sie nur 4 Zeilen der XML -Konfiguration hinzufügen. Sie können sich auf MDCFilter beziehen.
10. SiftingAungener (ein sehr multi -funktionaler Appender) Es kann verwendet werden, um die Protokolldatei gemäß den bestimmten Betriebsparametern zu teilen. Beispielsweise kann SifingAppender die Sitzung des Benutzers unterscheiden, die der Sitzung des Benutzers folgt, und dann hat jeder Benutzer eine Protokolldatei.
11. Komprimieren Sie automatisch das Protokoll -RollingFileAppender, das bei der Erzeugung neuer Dateien die gespielte Protokolldatei automatisch komprimiert. Komprimierung ist ein asynchroner Prozess, daher werden auch für große Protokolldateien Anwendungen im Komprimierungsprozess betroffen.
12. Der Stapelbaum hat eine Paketversion von Logback.
13. Entfernen Sie die alte Protokolldatei automatisch, indem Sie die Maxhistory -Eigenschaft von TimeBasedRollingPolicy oder SizeandTimeBasedfnatp einstellen. Wenn MaxHistory 12 festgelegt ist, werden die Protokolldateien, die über 12 Monate betrieben wurden, automatisch entfernt.
Kurz gesagt, der Logback ist besser als log4j.
3. Einführung in die Konfiguration des Logbacks
1. Logger, Appender und Layout
Logger, als Rekorder des Protokolls, assoziiert es in den entsprechenden Kontext, der verwendet wird, wird hauptsächlich zum Speichern von Protokollobjekten verwendet.
Appender wird hauptsächlich verwendet, um das Ziel der Protokollausgabe anzugeben.
Das Layout ist für die Ausgabe des Ereignisses in eine Zeichenfolge, formatierte Protokollinformationen verantwortlich.
2. Logger -Kontext
Jeder Logger ist einem LoggerContext zugeordnet. Alle anderen Logger wurden auch durch die statische Methode der org.slf4j.Loggerfactory -Klasse getLogger erhalten. Die GetLogger -Methode wird von Logger benannt. Verwenden Sie denselben Namen, um die LoggerFactory.GetLogger -Methode aufzurufen.
3. Vererbung wirksamer Ebenen und Ebenen
Logger kann zugewiesen werden. Zu den Ebenen gehören: Trace, Debugg, Info, Warn und Irrtum, definiert in Ch.qos.logback.classic.level Class. Wenn der Logger nicht zugeordnet ist, erbt er das Niveau vom nächsten Vorfahren der Verteilungsstufe. Die Standardebene von Root Logger ist Debug.
4. Druckmethode und grundlegende Auswahlregeln <BR /> Druckmethoden bestimmen die Ebene der Anforderung. Wenn L beispielsweise eine Logger -Instanz ist, ist die Anweisung L.Info ("..") eine Datensatzanweisung mit einer Level -Informationen. Die Ebene einer Protokollanforderung wird als aktiviert bezeichnet, wenn sie höher oder gleich der gültigen Ebene seines Protokolls ist, andernfalls wird sie als deaktiviert bezeichnet. Die Aufzeichnungsanforderung ist P und die gültige Logger -Ebene nur, wenn p> = q ausgeführt wird.
Diese Regel steht im Mittelpunkt des Logbacks. Level -Sortierung ist: Trace <debugg <info <Warn <Fehler
4. Die Standardkonfiguration von Logback <BR /> Wenn die Konfigurationsdateien logback-test.xml und logback.xml nicht vorhanden sind, ruft der Logback standardmäßig ein BasicConfigurator auf, um eine minimierte Konfiguration zu erstellen. So minimieren Sie die Konfiguration, die aus einem mit einem Stammlogger zugeordneten Konsoleadender besteht. Der Ausgangsmodus ist %d {hh: mm: ss.sss} [ %thread] %-5LEVEL %Logger {36} - %MSG %Ns MusterLayoutendCoder. Die Standardebene von Root Logger ist Debug.
1. Die Konfigurationsdatei von Logback
Die Syntax der Logback -Konfigurationsdatei ist sehr flexibel. Aufgrund der Flexibilität kann das DTD- oder XML -Schema nicht definiert werden. Trotzdem können Sie die Grundstruktur der Konfigurationsdatei auf diese Weise beschreiben: Beginnen Sie mit <Configuration>, es gibt Null oder mehr <ppender> Elemente, Null oder mehr <Logger> Elemente und maximal <root> Elemente.
2. Die Schritte der Standardkonfiguration des Logbacks
(1).
(2).
(3).
3.. Logback.xml -Datei
<? Appender name = "stdout"> <!-logausgabe codieren-> <codierung> utf-8 </codieren> <laayout> <!-Formatausgabe:%d bedeutet Datum,%Thread zeigt den Threadnamen an,%-5LEVEL: Stufe 5 Zeichenbreite von der linken Anzeige 5 Zeichenbreite%%MSG: Log Meldung,%n ist ein Änderungssymbol-> <ustern>%d {yyyy-mm-dd hh: mm: ss.ss} [%Thread]%- 5LEVEL %Logger {50}- %msg %n </muster> </layout> </appender> <!-Jeden Tages-Protokolldateien-> <ppender name = "file"> <coding> utf-8 </ Codierung> <RollingPolicy> <! /maxhistory> </rollingPolice> <layout> <!-Formuliertes Ausgang:%D repräsentiert das Datum,%Thread repräsentiert den Threadnamen,%d repräsentiert den Threadnamen,%-5LEVEL: 5 Zeichen Breite von links%msg angezeigt: Log Message,%n ist eine Änderung Zeichen-> <muster>%d {yyyy-mm-dd hh: mm: ss.sss} [%thread]%-5Level%Logger {50}-%msg%n </Muster > </Layout> <!-Die größte Größe der Protokolldatei-> <StriggeringPolice> <maxFileSize> 10MB </maxFilesize> </TriggeringPolice> </appen Der> <!-Showparameter für Hibernate SQL, die der Anpassung des Eibernate gewidmet sind -> <logger name = "organnate.type.descriptor.sql.basicbinder =" Trace " /> <logger =" org.hiberNate. org.hiberNate.sql "Level =" def " /> <log. erameters" Level = "Debug" /> <logger name = "org.hiberNate.engine.qury.hqlQueryPlan" Level = "Debug" /> <!-- Log-Ausgangsstufe-> <Root Level = "Info"> <ppender-ref = "stdout" /> <ppender-ref ref = "file" /> < /root> <!-Protokoll = "DB"> <! DatabaseName </url> <Benutzer> root </user> <kennwort> root </kennwort> </dataSource> </connectionsource> </appender> -> </configuration >> </configuration >> </Konfiguration >> </Konfiguration >> 5. Verwenden Sie den Referenz -Logback im Programm
Paket com.stu.System.Action; Klasse);
Lassen Sie uns als nächstes die Konfiguration von SLF4J+Logback im Java -Projekt einführen.
1. MAVEN -Basis SLF4J+Logback Pom.xml Konfiguration
<Depopentcy> <gruppe> org.slf4j </gruppeId> <artifactId> SLF4J-API </artifactId> <version> 1.7.10 </Version> </abhängig> <gruppe <artifactID> Logback-Classic </artifactId> <version> 1.1.2 </Version> </deendecy> <g.qos. /Version> </abhängig>
2. Erstellen Sie im CLASSPATH -Verzeichnis eine neue Konfigurationsdatei von logback.xml
<? ScanPeriode: Legt das Zeitintervall fest, ob die Konfigurationsdatei geändert wird. Das Standardzeitintervall beträgt 1 Minute. DEBUG: Wenn dieses Attribut auf true festgelegt ist, werden die internen Protokollinformationen des Logbacks gedruckt, um den laufenden Status des Logbacks in Echtzeit zu überprüfen. Der Standardwert ist falsch. -> <configuration scan = "false" scanPeriod = "60 Sekunden" Debug = "False"> <!-Definieren Sie das Stammverzeichnis des Protokolls-> <Eigenschaft name = "log_home" value = "/App/log " /> <!-Log-Dateiname definieren-> <Eigenschaft name =" appname "value =" netty "> < / property> <!-ch.qos.logback.core.conSeAppender zeigt die Konsolenausgabe an-> <Appender name = "stdout"> <codierung> utf-8 </codieren> <!-Protokollausgangsformat:%d bedeutet Datum,%Thread zeigt den Thread-Namen an,%-5LEVEL: Stufe 5 Zeichenbreite von 5 Zeichen aus links% %%%%% 5 Zeichenbreite %%%%%% LOGGER {50} bedeutet, dass der Logger -Name 50 Zeichen beträgt, andernfalls wird er gemäß der Zeit geteilt. %msg: log meldung, %n ist eine Änderung der Zeilen-> <layout> <Mustern> %d {yyyy-mm-dd hh: mm: ss.sss} [ %thread] %-5Level %Logger {50}- % msg% n </muster> </layout> </Appender> <!- Scrollen Sie, um die Datei aufzunehmen, zeichnen Sie zuerst das Protokoll in der angegebenen Datei auf und zeichnen Sie das Protokoll in anderen Dateien auf. -> <Appender name = "ApplogAppender"> <Codierung> UTF-8 </codieren> <!-Der Name der angegebenen Protokolldatei-> <datei> $ {log_home}/$ {Appname} .log </file> <! -> <RollingPolicy> <!-Der Speicherort und der Dateiname der Datei, die während des Rolling%d {yyyy-mm-dd} erzeugt wurde. appname}-%d {yyyy-mm-dd}-%i.log </fileNamePattern> <!-Optionaler Knoten, steuern Sie die reservierte Archivdatei die größte, wenn die Menge die Menge überschreitet, löschen Sie die alte Datei. Unter der Annahme, dass es jeden Tag gerollt ist und Maxhistory 365 beträgt, wird nur die letzte 365 -Tage -Datei gespeichert, um die alte Datei zuvor zu löschen. Beachten Sie, dass die alten Dateien gelöscht werden und das für Archive erstellte Verzeichnis ebenfalls gelöscht wird. -> <maxhistory> 365 </maxhistory> <! Zeitbasierte filenamingandtriggeringPolicy> <maxfilesize> 100mb </maxFilesize> </zeitbasierte filenamingan DtriggeringPolicy> </rollingPolicy> <!-Protokollausgabeformat:%D repräsentiert die Datumszeit,%Thread zeigt den Thread-Namen an,%-5LEVEL-das Level der 5-Niveau von 5 Charakteren von 5 Charakteren von 5 Charakteren von 5 Charakteren aus dem Level von 5 von 5 von 5 von 5 von 5 von 5 von 5 von 5 von 5 von 5 von 5 von 5 von 5 von 5 von 5 von 5 von 5 von 5 von 5 von 5 von 5 von 5 von 5 von 5 von 5 angibt. Die linke Anzeige 5 Zeichenbreite%Logger {50} zeigt an, dass der Logger -Name 50 Zeichen beträgt, ansonsten wird er gemäß dem Zeitraum geteilt. %MSG: Protokollnachricht, %n ist eine Änderung der Zeilen-> <laayout> <Muster> %d {yyyy-mm-dd hh: mm: ss.sss} [ %Thread]-[ %-5Level] [ %Logger {50}: %Zeile]- %msg %n </muster> </layout> </Appender> <!- Logger wird hauptsächlich zum Speichern von Protokollobjekten verwendet. Die erste Hälfte der Paketebene: Die zu erziehende Protokollebene, einschließlich Trace <debugg <info <Warn <Fehlerabschluss: Die Funktion ist, ob der Kinder-Logger den Appender verwendet, der von RootLogger für Ausgabe konfiguriert ist. Der Appender des aktuellen Loggers wird verwendet. = "Fehler" /> <! "Level =" info "additivivity =" true "> <ppender-ref ref =" pappogAppender " /> < /logger> <!-root und logger ist die Beziehung zwischen Vater und Sohn. Wenn es keine besondere Definition gibt, ist es Standard. -> <root Level = "info"> <ppender-ref = "stdout" /> <ppender-ref = "ApplogAppender" /> < /root> < /configuration>