Heim  >  Artikel  >  Java  >  So beheben Sie den Fehler bei der Integration von log4j mit Springboot

So beheben Sie den Fehler bei der Integration von log4j mit Springboot

王林
王林nach vorne
2023-05-11 10:07:051817Durchsuche

    1. Abhängigkeiten hinzufügen

    1.1. Das Hinzufügen von Abhängigkeiten

    erfordert die Einführung der log4j-Abhängigkeitsunterstützung.

    <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-to-slf4j</artifactId>
            <version>2.11.2</version>
    </dependency>

    1.2. Abhängigkeiten beseitigen

    Springboot verfügt standardmäßig über eine integrierte Unterstützung für Protokolle und alle müssen entfernt werden, da dies sonst Auswirkungen auf die Verwendung von log4j-Abhängigkeiten hat. 2. Konfigurationsprotokoll Wird angepasst, es gibt keine Anforderungen, diese werden in der Konfigurationsdatei angegeben.

    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
            <exclusions>
                <exclusion>
                   <groupId>*</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
    </dependency>

    2.2. Geben Sie die Konfigurationsdatei an

    Sie müssen die Konfiguration auch in der Projektkonfigurationsdatei von Spring Boot angeben.

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration  scan="true" scanPeriod="10 seconds">
        <contextName>beordie</contextName>
        <property name="path" value="E:\file\javalearn\blog\src\main\resources\logs" />
        <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
        <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
        <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
        <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
    
        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>info</level>
            </filter>
            <encoder>
                <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
                <charset>UTF-8</charset>
            </encoder>
        </appender>
    
        <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${path}/debug.log</file>
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
                <charset>UTF-8</charset>
            </encoder>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${log}/debug/log-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>100MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
                <maxHistory>15</maxHistory>
            </rollingPolicy>
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>debug</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
        </appender>
    
        <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${log}/info.log</file>
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
                <charset>UTF-8</charset>
            </encoder>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${log}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>100MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
                <maxHistory>15</maxHistory>
            </rollingPolicy>
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>info</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
        </appender>
    
        <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${log}/warn.log</file>
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
                <charset>UTF-8</charset>
            </encoder>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${log}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>100MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
                <maxHistory>15</maxHistory>
            </rollingPolicy>
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>warn</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
        </appender>
    
        <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${log}/error.log</file>
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
                <charset>UTF-8</charset>
            </encoder>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${log}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>100MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
                <maxHistory>15</maxHistory>
            </rollingPolicy>
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>ERROR</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
        </appender>
    
        <springProfile name="dev">
            <logger name="com.beordie" level="debug"/>
        </springProfile>
    
        <root level="info">
            <appender-ref ref="CONSOLE" />
            <appender-ref ref="DEBUG_FILE" />
            <appender-ref ref="INFO_FILE" />
            <appender-ref ref="WARN_FILE" />
            <appender-ref ref="ERROR_FILE" />
        </root>
    </configuration>

    Vervollständigen Sie hier die Gesamtkonfiguration des Protokolls. Starten Sie das Projekt und rufen Sie das Protokollobjekt über die folgende Anweisung ab, um das Protokoll zu drucken.

    logging:
      config: classpath:log4j.xml

    Hinzugefügt: log4j-Optimierung und Vorsichtsmaßnahmen

    Protokollmodus – synchron/asynchron

    log4j2 bietet AsyncAppender und AsyncLogger sowie globale Asynchronität, die Öffnungsmethode ist wie folgt:

    Synchronmodus: Die Standardkonfiguration ist synchroner Modus, d. h. es werden kein AsyncAppender und AsyncLogger verwendet.

      Global asynchron: Die Konfiguration ist synchron konfiguriert und kann durch Hinzufügen von JVM-Startparametern aktiviert werden, ohne die Konfiguration und Anwendung zu ändern.
    • Gemischte Asynchronität: Verwenden Sie eine gemischte Konfiguration aus asynchronem Logger und synchronem Logger und aktivieren Sie nicht die globale Asynchronität, d. h. ein Teil der Logger-Konfiguration ist AsyncLogger und ein Teil ist Logger.
    • Hinweise zur Verwendung des Protokollmodus:

    Wenn Sie asynchron verwenden, wird empfohlen, die AsyncLogger-Implementierung anstelle von AsyncAppender zu verwenden.

      Wenn Sie die Synchronisierung verwenden, können Sie nur AsyncLogger, AsyncAppender und globale Asynchronisierung verwenden. Sie können AsyncAppender und AsyncLogger nicht gleichzeitig konfigurieren oder globale Asynchronisierung aktivieren, wenn Asynchronisierung konfiguriert ist.
    • Log-Rolling- und Clearing-Strategie

    • log4j2 bietet eine dateigrößenbasierte Rolling-Strategie und eine zeitbasierte Rolling-Strategie, oder beide können zusammen verwendet werden. Hier sind die größenbasierte Rolling-Strategie-Konfiguration und die Größe/. zeitbasierte Dual-Rolling-Richtlinienkonfiguration:

    Größenbasierte Rolling-Richtlinie: Roll nach Größe, Komprimierung aktivieren und bis zu N Dateien beibehalten

      Dual-Roll basierend auf Größe/Zeit Rolling-Richtlinie: Roll nach Größe und Zeit, Komprimierung aktivieren, Einheiten Steuern Sie die maximale Anzahl der Protokolle, die innerhalb eines Zeitraums aufbewahrt werden, und steuern Sie die gesamte Protokollaufbewahrungszeit.

    Das obige ist der detaillierte Inhalt vonSo beheben Sie den Fehler bei der Integration von log4j mit Springboot. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen