Rumah  >  Artikel  >  Java  >  Bagaimana untuk menyelesaikan ralat apabila menyepadukan log4j dengan springboot

Bagaimana untuk menyelesaikan ralat apabila menyepadukan log4j dengan springboot

王林
王林ke hadapan
2023-05-11 10:07:051817semak imbas

    1. Menambah kebergantungan

    1.1 Menambah kebergantungan

    Anda perlu memperkenalkan sokongan kebergantungan untuk log4j versi yang hendak digunakan.

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

    1.2. Hapuskan kebergantungan

    springboot mempunyai sokongan terbina dalam untuk log secara lalai, dan kesemuanya perlu dialih keluar, jika tidak, ia akan menjejaskan penggunaan kebergantungan log4j.

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

    2. Log konfigurasi

    2.1. Rekod pencetakan log

     Konfigurasikan konfigurasi yang berkaitan mengikut keperluan anda sendiri untuk konfigurasi. Terdapat perangkap dalam menggunakan sifat Nama fail disesuaikan. Ia tidak akan dinyatakan dalam fail konfigurasi.

    <?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. Tentukan fail konfigurasi

    Anda juga perlu menentukan konfigurasi dalam fail konfigurasi projek but spring.

    logging:
      config: classpath:log4j.xml

    Lengkapkan konfigurasi keseluruhan log di sini Mulakan projek dan dapatkan objek log melalui pernyataan berikut untuk mencetak log.

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

    Tambahan: penalaan log4j dan langkah berjaga-jaga

    Mod log - segerak/tak segerak

    log4j2 menyediakan AsyncAppender, AsyncLogger dan dayakan kaedah tidak segerak global seperti berikut:

    • Mod segerak: Konfigurasi lalai ialah mod segerak, iaitu, tiada AsyncAppender dan AsyncLogger digunakan.

    • Asynchronous global: Konfigurasi dikonfigurasikan dengan cara segerak Global boleh dihidupkan dengan menambahkan parameter permulaan jvm tanpa mengubah konfigurasi dan aplikasi.

    • Campur tak segerak: Gunakan konfigurasi campuran Logger tak segerak dan Logger segerak, dan jangan dayakan tak segerak global, iaitu sebahagian daripada konfigurasi Logger ialah AsyncLogger dan sebahagian lagi Logger.

    Nota menggunakan mod log:

    • Jika tak segerak digunakan, adalah disyorkan untuk menggunakan pelaksanaan AsyncLogger dan bukannya AsyncAppender.

    • Jika anda menggunakan penyegerakan, anda hanya boleh menggunakan salah satu daripada AsyncLogger, AsyncAppender dan global async Anda tidak boleh mengkonfigurasi AsyncAppender dan AsyncLogger pada masa yang sama, atau mendayakan async global apabila async dikonfigurasikan.

    Strategi rolling dan clearing log

    log4j2 menyediakan strategi rolling berasaskan saiz fail dan strategi rolling berdasarkan masa, atau kedua-duanya boleh digunakan bersama-sama , berikut ialah konfigurasi strategi guling berasaskan saiz dan konfigurasi strategi dwi guling berasaskan saiz/masa:

    • Strategi guling berasaskan saiz: guling mengikut saiz, dayakan pemampatan, dan kekalkan paling banyak N Fail

    • Berdasarkan saiz/masa strategi rolling dwi rolling: rolling berdasarkan saiz dan masa, membolehkan pemampatan, mengawal bilangan maksimum log yang disimpan setiap unit masa dan mengawal jumlah masa pengekalan log.

    Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan ralat apabila menyepadukan log4j dengan springboot. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan:
    Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam