Inhaltsverzeichnis
Übersicht
Verwenden Sie das Spring Boot Logging-Plug-in
Log4J-Protokollierungsframework integrieren
Postscript
Heim Backend-Entwicklung PHP-Tutorial Praxis des Spring Boot-Protokollierungsframeworks – technischer Austausch von hansonwang99

Praxis des Spring Boot-Protokollierungsframeworks – technischer Austausch von hansonwang99

May 05, 2018 pm 03:11 PM
boot spring 实践

Dieser Artikel teilt Ihnen hauptsächlich die Praxis des Spring Boot-Protokollierungsframeworks mit. Der Codeteil ist auch sehr detailliert.


Übersicht

In Java-Anwendungen werden Protokolle im Allgemeinen in die folgenden 5 Ebenen unterteilt:

  • ERROR-Fehlermeldung

  • WARN-Warnmeldung

  • INFO allgemeine Informationen

  • DEBUG-Debugging-Informationen

  • TRACE-Tracking-Informationen

Spring Boot verwendet Apache Commons Logging als internes Protokollierungsframework, bei dem es sich lediglich um eine Protokollierungsschnittstelle handelt In tatsächlichen Anwendungen ist es erforderlich, die entsprechende Protokollimplementierung für diese Schnittstelle anzugeben.

Die Standardprotokollierungsimplementierung von SpringBt ist Java Util Logging, das Protokollierungspaket, das mit dem JDK geliefert wird. Darüber hinaus unterstützt SpringBt natürlich auch beliebte Protokollierungsimplementierungen wie Log4J und Logback.

Vereinigen Sie die oben genannten Protokollimplementierungen gemeinsam als Protokollrahmen

Lass es uns üben!


Verwenden Sie das Spring Boot Logging-Plug-in

  • Fügen Sie zunächst die Konfiguration zur application.properties-Datei hinzu:

logging.level.root=INFO
Nach dem Login kopieren
  • Der Controller-Teilecode lautet wie folgt:

package com.hansonwang99.controller;

import com.hansonwang99.K8sresctrlApplication;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/testlogging")
public class LoggingTestController {
    private static Logger logger = LoggerFactory.getLogger(K8sresctrlApplication.class);
    @GetMapping("/hello")
    public String hello() {
        logger.info("test logging...");
        return "hello";
    }
}
Nach dem Login kopieren
  • Laufergebnis

Praxis des Spring Boot-Protokollierungsframeworks – technischer Austausch von hansonwang99

Da die Protokollebene auf INFO eingestellt ist, werden Protokollinformationen mit INFO und höheren Ebenen gedruckt.

Hier sind so viele zu sehen und die meisten INFO-Protokolle stammen vom SpringBt-Framework selbst. Wenn wir sie blockieren möchten, können wir zuerst alle Protokollebenen auf FEHLER setzen, sodass die INFO-Informationen des Frameworks selbst nicht gedruckt werden. Legen Sie dann bestimmte Pakete in der Anwendung auf Protokolle der Stufe DEBUG fest, sodass Sie nur Protokolle der Stufe DEBUG und höher in den Paketen sehen können, die Sie interessieren.

  • Kontrollieren Sie die Protokollebene eines bestimmten Pakets

Ändern Sie die Konfiguration in application.yml

logging:
  level:
    root: error
    com.hansonwang99.controller: debug
Nach dem Login kopieren

Natürlich Root ändern Setzen Sie die Protokollebene auf ERROR und dann die Protokollebene des com.hansonwang99.controller-Pakets auf DEBUG. Dies bedeutet: Deaktivieren Sie zuerst alle und erlauben Sie dann einzelne Einstellungsmethoden

  • Controller-Code

package com.hansonwang99.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/testlogging")
public class LoggingTestController {
    private Logger logger = LoggerFactory.getLogger(this.getClass());
    @GetMapping("/hello")
    public String hello() {
        logger.info("test logging...");
        return "hello";
    }
}
Nach dem Login kopieren
  • Laufergebnis

Praxis des Spring Boot-Protokollierungsframeworks – technischer Austausch von hansonwang99

Sichtbarer Rahmen Alle Protokolle der eigenen INFO-Ebene werden ausgeblendet und die Protokolle im angegebenen Paket werden erfolgreich nach Ebene gedruckt

  • Protokolle in eine bestimmte Datei ausgeben

logging:
  level:
    root: error
    com.hansonwang99.controller: debug
  file: ${user.home}/logs/hello.log
Nach dem Login kopieren
  • Laufergebnisse

Praxis des Spring Boot-Protokollierungsframeworks – technischer Austausch von hansonwang99

Praxis des Spring Boot-Protokollierungsframeworks – technischer Austausch von hansonwang99

Bei Verwendung von Spring Boot Logging haben wir festgestellt, dass das Protokoll zwar in eine Datei ausgegeben wurde, aber immer noch eine Kopie in der Konsole gedruckt wird. Wir haben festgestellt, dass die Verwendung von org.slf4j.Logger dieses Problem nicht lösen kann

Praxis des Spring Boot-Protokollierungsframeworks – technischer Austausch von hansonwang99


Log4J-Protokollierungsframework integrieren

  • Abhängigkeit in pom.xml hinzufügen

       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>
Nach dem Login kopieren
  • Fügen Sie die Datei log4j2.xml im Ressourcenverzeichnis mit folgendem Inhalt hinzu:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <appenders>
        <File name="file" fileName="${sys:user.home}/logs/hello2.log">
            <PatternLayout pattern="%d{HH:mm:ss,SSS} %p %c (%L) - %m%n"/>
        </File>
    </appenders>

    <loggers>

        <root level="ERROR">
            <appender-ref ref="file"/>
        </root>
        <logger name="com.hansonwang99.controller" level="DEBUG" />
    </loggers>

</configuration>
Nach dem Login kopieren
  • Andere Codes bleiben unverändert

Führen Sie das Programm aus und stellen Sie fest, dass auf der Konsole keine Protokollausgabe erfolgt, die Datei hello2.log jedoch Inhalte enthält, die unseren Erwartungen entsprechen:

Praxis des Spring Boot-Protokollierungsframeworks – technischer Austausch von hansonwang99

Praxis des Spring Boot-Protokollierungsframeworks – technischer Austausch von hansonwang99

Praxis des Spring Boot-Protokollierungsframeworks – technischer Austausch von hansonwang99

Und Das Protokollformat entspricht dem im pattern="%d{HH:mm:ss,SSS} %p %c (%L) - %m%n"-Format definierten Format >


log4j2 xml-Konfiguration
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>
Nach dem Login kopieren
Controller-Code:
<?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 pattern="[%d][%t][%p][%l] %m%n" />
        </console>

        <RollingFile name="RollingFileInfo" fileName="${log_path}/info.log"
                     filePattern="${log_path}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log.gz">
            <Filters>
                <ThresholdFilter level="INFO" />
                <ThresholdFilter level="WARN" onMatch="DENY"
                                 onMismatch="NEUTRAL" />
            </Filters>
            <PatternLayout pattern="[%d][%t][%p][%c:%L] %m%n" />
            <Policies>
                <!-- 归档每天的文件 -->
                <TimeBasedTriggeringPolicy interval="1" modulate="true" />
                <!-- 限制单个文件大小 -->
                <SizeBasedTriggeringPolicy size="2 MB" />
            </Policies>
            <!-- 限制每天文件个数 -->
            <DefaultRolloverStrategy compressionLevel="0" max="10"/>
        </RollingFile>

        <RollingFile name="RollingFileWarn" fileName="${log_path}/warn.log"
                     filePattern="${log_path}/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log.gz">
            <Filters>
                <ThresholdFilter level="WARN" />
                <ThresholdFilter level="ERROR" onMatch="DENY"
                                 onMismatch="NEUTRAL" />
            </Filters>
            <PatternLayout pattern="[%d][%t][%p][%c:%L] %m%n" />
            <Policies>
                <!-- 归档每天的文件 -->
                <TimeBasedTriggeringPolicy interval="1" modulate="true" />
                <!-- 限制单个文件大小 -->
                <SizeBasedTriggeringPolicy size="2 MB" />
            </Policies>
            <!-- 限制每天文件个数 -->
            <DefaultRolloverStrategy compressionLevel="0" max="10"/>
        </RollingFile>

        <RollingFile name="RollingFileError" fileName="${log_path}/error.log"
                     filePattern="${log_path}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log.gz">
            <ThresholdFilter level="ERROR" />
            <PatternLayout pattern="[%d][%t][%p][%c:%L] %m%n" />
            <Policies>
                <!-- 归档每天的文件 -->
                <TimeBasedTriggeringPolicy interval="1" modulate="true" />
                <!-- 限制单个文件大小 -->
                <SizeBasedTriggeringPolicy size="2 MB" />
            </Policies>
            <!-- 限制每天文件个数 -->
            <DefaultRolloverStrategy compressionLevel="0" max="10"/>
        </RollingFile>

    </appenders>

    <loggers>


        <root level="info">
            <appender-ref ref="Console" />
            <appender-ref ref="RollingFileInfo" />
            <appender-ref ref="RollingFileWarn" />
            <appender-ref ref="RollingFileError" />
        </root>

    </loggers>

</configuration>
Nach dem Login kopieren
Laufergebnis
package com.hansonwang99.controller;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/testlogging")
public class LoggingTestController {
    private final Logger logger = LogManager.getLogger(this.getClass());
    @GetMapping("/hello")
    public String hello() {
        for(int i=0;i<10_0000;i++){
            logger.info("info execute index method");
            logger.warn("warn execute index method");
            logger.error("error execute index method");
        }
        return "My First SpringBoot Application";
    }
}
Nach dem Login kopieren

Praxis des Spring Boot-Protokollierungsframeworks – technischer Austausch von hansonwang99

Protokolle werden je nach Ebene in verschiedenen Dateien gespeichert. Wenn die Protokolldateigröße 2 MB überschreitet, wird sie zur komprimierten Speicherung in mehrere Dateien aufgeteilt Dateien in der Produktionsumgebung Es wird empfohlen, die Größe auf 20-50 MB anzupassen.


Postscript

Weitere Originalartikel des Autors finden Sie in der SF-Kolumne

Weitere praktische Artikel des Autors zu SpringBt finden Sie hier:

  • Die Praxis der ElasticSearch-Suchmaschine in SpringBoot

  • Eine vorläufige Studie zur gemeinsamen Programmierung von Kotlin+SpringBoot



Verwandte Empfehlungen:

Die 8 am häufigsten verwendeten Java-Protokollierungsframeworks für Java-Programmierer

Das obige ist der detaillierte Inhalt vonPraxis des Spring Boot-Protokollierungsframeworks – technischer Austausch von hansonwang99. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Windows-ISO-Datei zu groß BootCamp-Fehler [Behoben] Windows-ISO-Datei zu groß BootCamp-Fehler [Behoben] Feb 19, 2024 pm 12:30 PM

Wenn Sie bei der Verwendung von BootCampAssistant auf einem Mac-Computer die Fehlermeldung „Die Windows-ISO-Datei ist zu groß“ erhalten, kann dies daran liegen, dass die ISO-Dateigröße den von BootCampAssistant unterstützten Grenzwert überschreitet. Die Lösung für dieses Problem besteht darin, andere Tools zum Komprimieren der ISO-Dateigröße zu verwenden, um sicherzustellen, dass sie im BootCamp-Assistenten verarbeitet werden kann. BootCampAssistant ist ein praktisches Tool von Apple zum Installieren und Ausführen des Windows-Betriebssystems auf Mac-Computern. Es hilft Benutzern beim Einrichten eines Dual-Boot-Systems, sodass sie beim Start problemlos zwischen MacOS und Wind wählen können

Ein neues Programmierparadigma, wenn Spring Boot auf OpenAI trifft Ein neues Programmierparadigma, wenn Spring Boot auf OpenAI trifft Feb 01, 2024 pm 09:18 PM

Im Jahr 2023 ist die KI-Technologie zu einem heißen Thema geworden und hat enorme Auswirkungen auf verschiedene Branchen, insbesondere im Programmierbereich. Die Bedeutung der KI-Technologie wird den Menschen zunehmend bewusst, und die Spring-Community bildet da keine Ausnahme. Mit der kontinuierlichen Weiterentwicklung der GenAI-Technologie (General Artificial Intelligence) ist es entscheidend und dringend geworden, die Erstellung von Anwendungen mit KI-Funktionen zu vereinfachen. Vor diesem Hintergrund entstand „SpringAI“ mit dem Ziel, den Prozess der Entwicklung von KI-Funktionsanwendungen zu vereinfachen, ihn einfach und intuitiv zu gestalten und unnötige Komplexität zu vermeiden. Durch „SpringAI“ können Entwickler einfacher Anwendungen mit KI-Funktionen erstellen, wodurch diese einfacher zu verwenden und zu bedienen sind.

Verwenden Sie Spring Boot und Spring AI, um generative Anwendungen für künstliche Intelligenz zu erstellen Verwenden Sie Spring Boot und Spring AI, um generative Anwendungen für künstliche Intelligenz zu erstellen Apr 28, 2024 am 11:46 AM

Als Branchenführer bietet Spring+AI durch seine leistungsstarke, flexible API und erweiterte Funktionen führende Lösungen für verschiedene Branchen. In diesem Thema werden wir uns mit den Anwendungsbeispielen von Spring+AI in verschiedenen Bereichen befassen. Jeder Fall wird zeigen, wie Spring+AI spezifische Anforderungen erfüllt, Ziele erreicht und diese LESSONSLEARNED auf ein breiteres Anwendungsspektrum ausdehnt. Ich hoffe, dieses Thema kann Sie dazu inspirieren, die unendlichen Möglichkeiten von Spring+AI tiefer zu verstehen und zu nutzen. Das Spring-Framework hat eine mehr als 20-jährige Geschichte im Bereich der Softwareentwicklung, und seit der Veröffentlichung der Spring Boot 1.0-Version sind 10 Jahre vergangen. Nun kann niemand diesen Frühling bestreiten

Was sind die Implementierungsmethoden für programmatische Frühlingstransaktionen? Was sind die Implementierungsmethoden für programmatische Frühlingstransaktionen? Jan 08, 2024 am 10:23 AM

So implementieren Sie programmgesteuerte Spring-Transaktionen: 1. Verwenden Sie TransactionCallback und TransactionCallbackWithoutResult; 4. Verwenden Sie TransactionTemplate in Kombination mit @Transactional;

So verhindern Sie, dass Outlook automatisch Ereignisse zu meinem Kalender hinzufügt So verhindern Sie, dass Outlook automatisch Ereignisse zu meinem Kalender hinzufügt Feb 26, 2024 am 09:49 AM

Als E-Mail-Manager-Anwendung ermöglicht uns Microsoft Outlook die Planung von Ereignissen und Terminen. Es ermöglicht uns, organisiert zu bleiben, indem es Tools zum Erstellen, Verwalten und Verfolgen dieser Aktivitäten (auch Ereignisse genannt) in der Outlook-Anwendung bereitstellt. Allerdings werden manchmal unerwünschte Ereignisse zum Kalender in Outlook hinzugefügt, was zu Verwirrung bei den Benutzern führt und den Kalender mit Spam überschwemmt. In diesem Artikel werden wir verschiedene Szenarien und Schritte untersuchen, die uns dabei helfen können, zu verhindern, dass Outlook automatisch Ereignisse zu meinem Kalender hinzufügt. Outlook-Ereignisse – ein kurzer Überblick Outlook-Ereignisse dienen mehreren Zwecken und verfügen über viele nützliche Funktionen wie folgt: Kalenderintegration: In Outlook

So legen Sie die Transaktionsisolationsstufe im Frühjahr fest So legen Sie die Transaktionsisolationsstufe im Frühjahr fest Jan 26, 2024 pm 05:38 PM

So legen Sie die Transaktionsisolationsstufe in Spring fest: 1. Verwenden Sie die Annotation @Transactional. 3. Legen Sie sie in der Spring-Konfigurationsdatei fest. 4. Legen Sie sie in der Java-Konfigurationsklasse fest. Detaillierte Einführung: 1. Verwenden Sie die Annotation @Transactional, fügen Sie die Annotation @Transactional zu der Klasse oder Methode hinzu, die eine Transaktionsverwaltung erfordert, und legen Sie die Isolationsstufe im Attribut fest. 2. In der Spring-Konfigurationsdatei usw.

Mar 18, 2024 am 10:18 AM

Dream Weaver CMS Station Group Practice Sharing In den letzten Jahren hat die Erstellung von Websites mit der rasanten Entwicklung des Internets immer mehr an Bedeutung gewonnen. Bei der Erstellung mehrerer Websites hat sich die Site-Group-Technologie zu einer sehr effektiven Methode entwickelt. Unter den vielen Tools zum Erstellen von Websites ist DreamWeaver CMS aufgrund seiner Flexibilität und Benutzerfreundlichkeit für viele Website-Enthusiasten zur ersten Wahl geworden. In diesem Artikel werden einige praktische Erfahrungen mit der Dreamweaver CMS-Stationsgruppe sowie einige spezifische Codebeispiele vorgestellt, in der Hoffnung, Lesern, die sich mit der Stationsgruppentechnologie befassen, etwas Hilfe zu bieten. 1. Was ist die Dreamweaver CMS-Stationsgruppe? Dream Weaver CMS

Ausführliche Diskussion der Prinzipien und Praktiken des Struts-Frameworks Ausführliche Diskussion der Prinzipien und Praktiken des Struts-Frameworks Feb 18, 2024 pm 06:10 PM

Prinzipielle Analyse und praktische Erkundung des Struts-Frameworks. Als häufig verwendetes MVC-Framework in der JavaWeb-Entwicklung verfügt das Struts-Framework über gute Entwurfsmuster und Skalierbarkeit und wird häufig in der Anwendungsentwicklung auf Unternehmensebene verwendet. In diesem Artikel werden die Prinzipien des Struts-Frameworks analysiert und anhand tatsächlicher Codebeispiele untersucht, um den Lesern zu helfen, das Framework besser zu verstehen und anzuwenden. 1. Analyse der Prinzipien des Struts-Frameworks 1. MVC-Architektur Das Struts-Framework basiert auf MVC (Model-View-Con

See all articles