Maison  >  Article  >  Java  >  Comment résoudre l'erreur lors de l'intégration de log4j avec Springboot

Comment résoudre l'erreur lors de l'intégration de log4j avec Springboot

王林
王林avant
2023-05-11 10:07:051817parcourir

    1. Ajout de dépendances

    1.1. L'ajout de dépendances

    nécessite l'introduction du support des dépendances log4j.

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

    1.2. Éliminer les dépendances

    springboot a une prise en charge intégrée des journaux par défaut, et tous doivent être supprimés, sinon cela affectera l'utilisation des dépendances log4j.

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

    2. Journal de configuration

    2.1. Enregistrement d'impression du journal

     Configurez les configurations associées en fonction de vos propres besoins. Ce à quoi vous devez faire attention ici est d'utiliser des fichiers XML pour la configuration, d'utiliser les propriétés et le nom du fichier. est personnalisé, il n’y a aucune exigence, elles seront spécifiées dans le fichier de configuration.

    <?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>

    2.2. Spécifiez le fichier de configuration

    Vous devez également spécifier la configuration dans le fichier de configuration du projet de Spring Boot.

    logging:
      config: classpath:log4j.xml

    Complétez la configuration globale du journal ici. Démarrez le projet et récupérez l'objet journal via l'instruction suivante pour imprimer le journal.

    private final Logger LOGGING = LoggerFactory.getLogger(ArticleController.class);

    Ajout : réglage et précautions de log4j

    Mode journal - synchrone/asynchrone

    log4j2 fournit AsyncAppender et AsyncLogger ainsi que l'asynchrone global, la méthode d'ouverture est la suivante :

    • Mode synchrone : La configuration par défaut est mode synchrone , c'est-à-dire qu'aucun AsyncAppender et AsyncLogger ne sont utilisés.

    • Asynchrone global : la configuration est configurée de manière synchrone. L'asynchrone global peut être activé en ajoutant des paramètres de démarrage jvm sans modifier la configuration et l'application.

    • Asynchrone mixte : utilisez une configuration mixte de Logger asynchrone et de Logger synchrone, et n'activez pas l'asynchrone global, c'est-à-dire qu'une partie de la configuration de Logger est AsyncLogger et une partie est Logger.

    Remarques sur l'utilisation du mode journal :

    • Si vous utilisez l'asynchrone, il est recommandé d'utiliser l'implémentation d'AsyncLogger au lieu d'AsyncAppender.

    • Si vous utilisez la synchronisation, vous ne pouvez utiliser qu'un seul parmi AsyncLogger, AsyncAppender et global async. Vous ne pouvez pas configurer AsyncAppender et AsyncLogger en même temps, ni activer l'async global lorsque l'async est configuré.

    Stratégie de roulement et d'effacement des journaux

    log4j2 fournit une stratégie de roulement basée sur la taille du fichier et une stratégie de roulement basée sur le temps, ou les deux peuvent être utilisées ensemble. Voici la configuration de la stratégie de roulement basée sur la taille et la taille/. Configuration de la politique de roulement double basée sur le temps :

    • Politique de roulement basée sur la taille : rouler par taille, activer la compression et conserver jusqu'à N fichiers

    • Double rouleau basé sur la taille/le temps Politique de roulement : rouler par taille et temps, activer la compression, unités Contrôler le nombre maximum de journaux conservés sur une période donnée et contrôler la durée totale de conservation des journaux.

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Déclaration:
    Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer