In Java -Anwendungen sind Protokolle im Allgemeinen in die folgenden 5 Ebenen unterteilt:
Spring Boot verwendet Apache's Commons -Protokollierung als internes Protokollierungs -Framework. Es ist nur eine Protokollschnittstelle. In den tatsächlichen Anwendungen ist es erforderlich, die entsprechende Protokollimplementierung für diese Schnittstelle anzugeben.
Die Standardprotokollimplementierung von SpringBT ist die Java -Util -Protokollierung, ein Protokollpaket, das in JDK integriert ist. Darüber hinaus unterstützt Springbt auch sehr beliebte Protokollimplementierungen wie Log4J und Logback.
Die obigen Protokollimplementierungen werden gemeinsam als Protokoll -Frameworks bezeichnet
Üben wir es unten!
Verwenden des Feder -Boot -Protokollierungs -Plugins
Fügen Sie zunächst Konfiguration zur Datei application.Properties hinzu:
logging.level.root = info
Der Controller -Code lautet wie folgt:
Paket com.hansonwang99.controller; import com.hansonwang99.k8sresctrlapplication; import org.slf4j.logger; import org.slf4j.loggerfactory; org.springframework.web.bind.annotation.requestmaping; import org.springframework.web.bind.annotation.restcontroller;@rastcontroller@requestmaping ("/testlogging") öffentlicher Klassen loggingTestController {privat statater logger logger = LoggerFactory.getLogger (k8sresctrlApplication.class); @GetMapping ("/hello") public String hello () {logger.info ("Testprotokollierung ..."); zurück "Hallo"; }}Auslaufergebnisse
Da die Protokollebene auf Informationen eingestellt ist, werden Protokollinformationen mit Informationen und oben ausgedruckt
Wie hier zu sehen ist, stammen die meisten Info -Protokolle aus dem SpringBT -Framework selbst. Wenn wir sie blockieren möchten, können wir zuerst die Protokollebene auf Fehler festlegen, damit die Informationen des Frameworks selbst nicht gedruckt werden. Stellen Sie das spezifische Paket in der Anwendung dann auf ein Debug -Level -Protokoll ein, damit Sie nur die Debug -Level -Protokolle in dem Paket sehen können, über das Sie besorgt sind.
Steuert die Protokollebene eines bestimmten Pakets
Ändern Sie die Konfiguration in application.yml
Protokollierung: Level: Root: Fehler com.hansonwang99.Controller: Debugg
Es ist offensichtlich, dass die Stammprotokollebene auf Fehler gesetzt ist und dann die Protokollebene com.hansonwang99.controller -Pakets auf Debug eingestellt sind, was bedeutet: Zuerst verbieten Sie alle Einstellungen und dann einzelne Einstellungen.
Controller -Code
Paket com.hansonwang99.controller; import org.slf4j.logger; import org.slf4j.loggerfactory; import org.springframework.web.bind.annotation.getmapping; org.springframework.web.bind.annotation.restController;@rastController@requestMapping ("/testlogging") public class loggingtestController {private logger logger = loggerfactory.getLogger (this.getClass (); @GetMapping ("/hello") public String hello () {logger.info ("Testprotokollierung ..."); zurück "Hallo"; }}Auslaufergebnisse
Es ist ersichtlich, dass das Framework selbst alle info-Ebene versteckten Protokolle aufweist und die Protokolle im angegebenen Paket erfolgreich nach der Ebene gedruckt werden.
Ausgabeprotokolle für eine Datei
Protokollierung: Stufe: Root: Fehler com.hansonwang99.Controller: Debug -Datei: $ {user.home} /logs/hello.logAuslaufergebnisse
Mithilfe der Spring -Boot -Protokollierung haben wir festgestellt, dass das Protokoll, obwohl das Protokoll in die Datei ausgegeben wurde, eine Kopie jedoch in der Konsole weitergegeben wird. Wir haben festgestellt, dass die Verwendung org.slf4j.Logger dieses Problem nicht lösen kann
Integriertes log4j log Framework
Fügen Sie Abhängigkeiten in pom.xml hinzu
<Depopenty> <gruppe> org.springFramework.boot </Groupid> <artifactId> Spring-Boot-Starter-Web </artifactid> <ausschlüsse> <Eclusion> <gruppe org.springFramework.boot </gruppen> <artifactid> Spring-B OOT-Starter-Logging </artifactId> </exklusion> </exklusions> </abhängig> <depeopy> <gruppe> org.springframework
Fügen Sie die Datei log4j2.xml in das Ressourcenverzeichnis hinzu, der Inhalt lautet wie folgt:
<xml version = "1.0" coding = "utf -8"?> <configuration> <Appenders> <Dateiname = "Datei" Datei "Datei" $ "{sys: user.home} /logs/hello2.Log"> <musterlayout muster = " %d {Hhh: mm: ss, ss, ss} %p %c ( %l) - %m %m %m % </Appenders> <Loggers> <root Level = "Fehler"> <Appender-ref ref = "file"/> </root> <logger name = "com.hansonwang99.controller" Level = "Debug"/> </loggers> </configuration>Der andere Code bleibt der gleiche
Das Ausführen des Programms ergab, dass die Konsole keine Protokollausgabe hat und Inhalte in der Hello2.log -Datei enthält, die mit unseren Erwartungen übereinstimmt:
Und das logarithmische Format entspricht der Definition in pattern="%d{HH:mm:ss,SSS} %p %c (%L) - %m%n" Format
Log4j nimmt weiter üben
POM.XML -Konfiguration:
<Depopenty> <gruppe> org.springFramework.boot </Groupid> <artifactId> Spring-Boot-Starter-Web </artifactid> <ausschlüsse> <Eclusion> <gruppe org.springFramework.boot </gruppen> <artifactid> Spring-B OOT-Starter-Logging </artifactId> </exklusion> </exklusions> </abhängig> <depeopy> <gruppe> org.springframework
log4j2.xml Konfiguration
<?xml version="1.0" encoding="UTF-8"?><configuration status="warn"> <properties> <Property name="app_name">springboot-web</Property> <Property name="log_path">logs/${app_name}</Property> </properties> <appenders> <console name="Console" target="SYSTEM_OUT"> <PatternLayout muster = "[%d] [%t] [%p] [%l]%m%n"/> </console> <rollingFile name = "rollingFileInfo" Dateiname = "$ {log_path} /info.log" filePatters = "$ {log_path}/$$ {Datum: yyyy-mm}/info-%d {yyyy-mm-dd}-%I.Log.gz"> <filters> <ThresholdFilter Level = "Info"/> <Thresholder Level = "Warn". muster = "[%d] [%t] [%p] [%c:%l]%m%n" /> <Richtlinien> <!-Archiv-tägliche Dateien-> <zeitbasierte TregeringPolicy Interval = "1" moduliert = "true" /> <!-Begrenzen Sie eine einzelne Dateigröße-> <Grenzbußpolitikgröße A. <DefaUltrolloverStrategy compressionLevel = "0" max = "10"/> </rollingfile> <rollingfile name = "rollingFilewarn" Dateiname = "$ {log_path} /warn.log" filePattreN = "$ {log_path}/$$ {Datum: yyyy-mm}/warn-%d {yyyy-mm-dd}-%I.Log.gz"> <filters> <thresholdfilter Level = "Warn"/> <ThresholdFilter). muster = "[%d] [%t] [%p] [%c:%l]%m%n" /> <Richtlinien> <!-Archiv-tägliche Dateien-> <zeitbasierte TregeringPolicy Interval = "1" moduliert = "true" /> <!-Begrenzen Sie eine einzelne Dateigröße-> <Grenzbußpolitikgröße A. <DefaUltrolloverStrategy compressionlevel = "0" max = "10"/> </rollingFile> <rollingfile name = "rollingFileError" Dateiname = "$ {log_path} /Error.log" filePattern = "$ {log_path} /$$ {Datum: yyyy-mm} /fehler-%d {yyyy-mm-dd}-%i.Log.gz"> <Thresholdfilter-Level = "Fehler" /> <musterlayout muster = "[%t] [%p] agdel. <Zeitbasierte TregeringPolicy Interval = "1" moduliert = "true"/> <!-Einschränkende Einzeldateigröße-> <sizebasedTriggeringPolicy size Level = "info"> <Appender-ref ref = "console" /> <appender-ref ref = "rollingFileInfo" /> <Appender-ref ref = "rollingFilewarn" /> <Appender-ref ref = "rollingFileError" /> < /root> < /loggers> < /configuration>Controller -Code:
Paket com.hansonwang99.controller; import org.apache.logging.log4j.logmanager; import org.apache.logging.log4j.logger import org.spingframework.web.bind.annotation org.springframework.web.bind.annotation.restController;@rastController@requestmapping ("/testlogging") public class loggingtestController {private legale logger logger = logManager.getlogger (this.getClass ()); @GetMapping ("/hello") public String hello () {für (int i = 0; i <10_0000; i ++) {logger.info ("Info Execute Index -Methode"); logger.warn ("Warn Execute Indexmethode"); logger.Error ("Fehler ausführen index ausführen"); } return "meine erste Springboot -Anwendung"; }}Auslaufergebnisse
Protokolle werden in verschiedenen Dateien gemäß verschiedenen Ebenen gespeichert. Wenn die Größe der Protokolldatei 2M überschreitet, werden mehrere Dateien komprimiert und gespeichert. Es wird empfohlen, die Größe der Protokolldatei der Produktionsumgebung auf 20-50 MB anzupassen.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.