SpringBoot整合Log4j2日誌框架

Evan1024發表於2024-03-06

SpringBoot底層預設使用logback日誌框架。
切換使用Log4j2日誌框架。

pom.xml配置

<!-- web場景啟動器 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
	<!-- 排除預設日誌框架 -->
    <exclusions>
        <exclusion>
            <artifactId>spring-boot-starter-logging</artifactId>
            <groupId>org.springframework.boot</groupId>
        </exclusion>
    </exclusions>
</dependency>
<!-- 新增log4j2日誌框架的場景啟動器 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

log4j2-spring.xml

檔案命名固定log4j2-spring.xml,讓SpringBoot載入配置檔案。
檔名為log4j2.xml,檔案將繞過SpringBoot直接呼叫日誌框架。

<?xml version="1.0" encoding="UTF-8"?>
<!--
Configuration後面的status,這個用於設定log4j2自身內部的資訊輸出,可以不設定,
當設定成trace時,可以看到log4j2內部各種詳細輸出
monitorInterval:Log4j能夠自動檢測修改配置檔案和重新配置本身,設定間隔秒數
-->
<Configuration status="debug" monitorInterval="180" packages="com.evan" disableAnsi="false" >
    <!--日誌級別以及優先順序排序:
    OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL
    -->
    <properties>
        <!-- 檔案日誌在當前專案目錄下 -->
        <property name="LOG_HOME">./logs</property>
        <!--檔案日誌在當前專案所在磁碟的根目錄儲存-->
        <!--<property name="LOG_HOME">/logs</property>-->
        <!--檔案日誌指定儲存地址-->
        <!--<property name="LOG_HOME">D:/logs</property>-->
        <!--日誌輸出格式 -->
        <property name="PATTERN">%date{YYYY-MM-dd HH:mm:ss,SSS} %level [%thread][%file:%line] - %msg%n%throwable</property>
    </properties>
    <Appenders>
        <!--*********************控制檯日誌***********************-->
        <Console name="consoleAppender" target="SYSTEM_OUT">
            <!--控制檯只輸出level及以上級別的資訊(onMatch),其他的直接拒絕(onMismatch) -->
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            <!--設定日誌格式及顏色-->
            <PatternLayout
                    pattern="%style{%d{ISO8601}}{bright,green} %highlight{%-5level} [%style{%t}{bright,blue}] %style{%C{}}{bright,yellow}: %msg%n%style{%throwable}{red}"
                     noConsoleNoAnsi="false"/>
        </Console>

        <!--*********************檔案日誌***********************-->
        <!--all級別日誌-->
        <RollingFile name="allFileAppender"
                     fileName="${LOG_HOME}/all.log"
                     filePattern="${LOG_HOME}/$${date:yyyy-MM}/all-%d{yyyy-MM-dd}-%i.log.gz">
            <!--設定日誌格式-->
            <PatternLayout>
                <pattern>%d %p %C{} [%t] %m%n</pattern>
            </PatternLayout>
            <Policies>
                <!-- 設定日誌檔案切分引數 -->
                <!--<OnStartupTriggeringPolicy/>-->
                <!--設定日誌基礎檔案大小,超過該大小就觸發日誌檔案滾動更新-->
                <SizeBasedTriggeringPolicy size="100MB"/>
                <!--設定日誌檔案滾動更新的時間,依賴於檔案命名filePattern的設定-->
                <TimeBasedTriggeringPolicy/>
            </Policies>
            <!--設定日誌的檔案個數上限,不設定預設為7個,超過大小後會被覆蓋;依賴於filePattern中的%i-->
            <DefaultRolloverStrategy max="100"/>
        </RollingFile>

        <!--debug級別日誌-->
        <RollingFile name="debugFileAppender"
                     fileName="${LOG_HOME}/debug.log"
                     filePattern="${LOG_HOME}/$${date:yyyy-MM}/debug-%d{yyyy-MM-dd}-%i.log.gz">
            <Filters>
                <!--過濾掉info及更高階別日誌-->
                <ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL"/>
            </Filters>
            <!--設定日誌格式-->
            <PatternLayout>
                <pattern>%d %p %C{} [%t] %m%n</pattern>
            </PatternLayout>
            <Policies>
                <!-- 設定日誌檔案切分引數 -->
                <!--<OnStartupTriggeringPolicy/>-->
                <!--設定日誌基礎檔案大小,超過該大小就觸發日誌檔案滾動更新-->
                <SizeBasedTriggeringPolicy size="100MB"/>
                <!--設定日誌檔案滾動更新的時間,依賴於檔案命名filePattern的設定-->
                <TimeBasedTriggeringPolicy/>
            </Policies>
            <!--設定日誌的檔案個數上限,不設定預設為7個,超過大小後會被覆蓋;依賴於filePattern中的%i-->
            <DefaultRolloverStrategy max="100"/>
        </RollingFile>

        <!--info級別日誌-->
        <RollingFile name="infoFileAppender"
                     fileName="${LOG_HOME}/info.log"
                     filePattern="${LOG_HOME}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log.gz">
            <Filters>
                <!--過濾掉warn及更高階別日誌-->
                <ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/>
            </Filters>
            <!--設定日誌格式-->
            <PatternLayout>
                <pattern>%d %p %C{} [%t] %m%n</pattern>
            </PatternLayout>
            <Policies>
                <!-- 設定日誌檔案切分引數 -->
                <!--<OnStartupTriggeringPolicy/>-->
                <!--設定日誌基礎檔案大小,超過該大小就觸發日誌檔案滾動更新-->
                <SizeBasedTriggeringPolicy size="100MB"/>
                <!--設定日誌檔案滾動更新的時間,依賴於檔案命名filePattern的設定-->
                <TimeBasedTriggeringPolicy/>
            </Policies>
            <!--設定日誌的檔案個數上限,不設定預設為7個,超過大小後會被覆蓋;依賴於filePattern中的%i-->
            <!--<DefaultRolloverStrategy max="100"/>-->
        </RollingFile>

        <!--warn級別日誌-->
        <RollingFile name="warnFileAppender"
                     fileName="${LOG_HOME}/warn.log"
                     filePattern="${LOG_HOME}/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log.gz">
            <Filters>
                <!--過濾掉error及更高階別日誌-->
                <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
            </Filters>
            <!--設定日誌格式-->
            <PatternLayout>
                <pattern>%d %p %C{} [%t] %m%n</pattern>
            </PatternLayout>
            <Policies>
                <!-- 設定日誌檔案切分引數 -->
                <!--<OnStartupTriggeringPolicy/>-->
                <!--設定日誌基礎檔案大小,超過該大小就觸發日誌檔案滾動更新-->
                <SizeBasedTriggeringPolicy size="100 MB"/>
                <!--設定日誌檔案滾動更新的時間,依賴於檔案命名filePattern的設定-->
                <TimeBasedTriggeringPolicy/>
            </Policies>
            <!--設定日誌的檔案個數上限,不設定預設為7個,超過大小後會被覆蓋;依賴於filePattern中的%i-->
            <DefaultRolloverStrategy max="100"/>
        </RollingFile>

        <!--error及更高階別日誌-->
        <RollingFile name="errorFileAppender"
                     fileName="${LOG_HOME}/error.log"
                     filePattern="${LOG_HOME}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log.gz">
            <!--設定日誌格式-->
            <PatternLayout>
                <pattern>%d %p %C{} [%t] %m%n</pattern>
            </PatternLayout>
            <Policies>
                <!-- 設定日誌檔案切分引數 -->
                <!--<OnStartupTriggeringPolicy/>-->
                <!--設定日誌基礎檔案大小,超過該大小就觸發日誌檔案滾動更新-->
                <SizeBasedTriggeringPolicy size="100 MB"/>
                <!--設定日誌檔案滾動更新的時間,依賴於檔案命名filePattern的設定-->
                <TimeBasedTriggeringPolicy/>
            </Policies>
            <!--設定日誌的檔案個數上限,不設定預設為7個,超過大小後會被覆蓋;依賴於filePattern中的%i-->
            <DefaultRolloverStrategy max="100"/>
        </RollingFile>

        <!--json格式error級別日誌-->
        <RollingFile name="errorJsonAppender"
                     fileName="${LOG_HOME}/error-json.log"
                     filePattern="${LOG_HOME}/error-json-%d{yyyy-MM-dd}-%i.log.gz">
            <JSONLayout compact="true" eventEol="true" locationInfo="true"/>
            <Policies>
                <SizeBasedTriggeringPolicy size="100 MB"/>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
            </Policies>
        </RollingFile>
    </Appenders>

    <Loggers>
        <!-- 根日誌設定 -->
        <Root level="debug">
            <AppenderRef ref="allFileAppender" level="all"/>
            <AppenderRef ref="consoleAppender" level="debug"/>
            <AppenderRef ref="debugFileAppender" level="debug"/>
            <AppenderRef ref="infoFileAppender" level="info"/>
            <AppenderRef ref="warnFileAppender" level="warn"/>
            <AppenderRef ref="errorFileAppender" level="error"/>
            <AppenderRef ref="errorJsonAppender" level="error"/>
        </Root>

        <Logger name="springfox" level="INFO"/>
        <!--spring日誌-->
        <Logger name="org.springframework" level="info"/>
        <!--druid資料來源日誌-->
        <Logger name="druid.sql.Statement" level="info"/>
        <!-- mybatis日誌 -->
        <Logger name="com.mybatis" level="warn"/>
        <Logger name="org.hibernate" level="warn"/>
        <Logger name="com.zaxxer.hikari" level="info"/>
        <Logger name="org.quartz" level="info"/>
        <Logger name="com.ym.learn" level="debug"/>
    </Loggers>

</Configuration>

控制檯日誌輸出資訊

image

日誌檔案生成

image

說明:日誌檔案生成在當前專案下

相關文章