1. 程式人生 > >SpringBoot學習(三)--Spring profile多環境方式實現logback日誌配置

SpringBoot學習(三)--Spring profile多環境方式實現logback日誌配置

繼上一篇搭建基礎web開發框架後,繼續學習和完善專案工程。SpringBoot集成了logback,所以只需要配置一下就可以,這裡使用自帶Spring profile方式進行多環境配置。

簡介

Spring profile是Spring 3引入的概念,主要用在專案多環境執行的情況下,通過啟用方式實現多環境切換,省去多環境切換時配置引數和檔案的修改,相比較Maven profile簡單實用,易於上手。並且Spring profile提供了多種啟用方法,例如配置檔案,註解,jvm引數設定等等

Spring profile多環境配置

1.在根目錄(建議以application開頭命名方式)新建各環境配置檔案,例如圖
這裡寫圖片描述

2.分別配置各環境有差異的配置,共有配置可以配置在application.yml,例如application-dev配置開發環境的日誌配置,application-prd配置生產環境的日誌配置(具體日誌配置下面介紹)。
這裡寫圖片描述

3.在application.yml加上當前生效的環境配置,例如profiles:active:dev表示當前生效的環境配置為application-dev.yml,事先配好每個環境的配置,切換環境時只需要修改active:dev即可,無需複雜的修改各個配置。
這裡寫圖片描述

logback日誌配置

這裡logback-dev環境,使用了簡單同步配置的日誌輸入方式,如下

<?xml version="1.0" encoding="UTF-8"?>
<!-- 不分級別同步檔案日誌輸出配置 --> <configuration> <!-- 日誌級別 --> <property name="logLevel" value="INFO"></property> <!-- 日誌地址 --> <property name="logPath" value="./logs"></property> <!-- 最大儲存時間 --> <property name="maxHistory" value="10"
/>
<!-- 非同步緩衝佇列的深度,該值會影響效能.預設值為256 --> <property name="queueSize" value="512"></property> <!-- 控制檯列印日誌的相關配置 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <!-- 日誌格式 --> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} %-4relative [%thread] %-5level %logger{35} - %msg %n</pattern> </encoder> </appender> <!-- 檔案儲存日誌的相關配置,同步 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 儲存日誌檔案的路徑 --> <file>${logPath}/cms.log</file> <!-- 日誌格式 --> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} %-4relative [%thread] %-5level %logger{35} - %msg %n</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>${logLevel}</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <!-- 迴圈政策:基於時間建立日誌檔案 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 日誌檔名格式 --> <fileNamePattern>${logPath}/cms-%d{yyyy-MM-dd}.log</fileNamePattern> <!-- 最大儲存時間--> <maxHistory>${maxHistory}</maxHistory> </rollingPolicy> </appender> <!--配置mybatis sql 日誌--> <logger name="com.pf.org.cms.mapper" level="DEBUG"/> <!-- 基於INFO處理日誌:具體控制檯或者檔案對日誌級別的處理還要看所在appender配置的filter,如果沒有配置filter,則使用root配置 --> <root level="${logLevel}"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE" /> </root> </configuration>

輸出為:
這裡寫圖片描述

logback-prd環境,使用了非同步分級別日誌輸出方式,如下

<?xml version="1.0" encoding="UTF-8"?>
<!-- 分級別非同步檔案日誌輸出配置 -->
<configuration>
    <!-- 日誌級別 -->
    <property name="logLevel" value="INFO"></property>
    <!-- 日誌地址 -->
    <property name="logPath" value="./logs"></property>
    <!-- 最大儲存時間 -->
    <property name="maxHistory" value="30"/>
    <!-- 非同步緩衝佇列的深度,該值會影響效能.預設值為256 -->
    <property name="queueSize" value="512"></property>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
        </encoder>
    </appender>

    <appender name="FILE_DEBUG"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <file>${logPath}/cms_debug.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logPath}/cms_debug.log.%d{yyyy-MM-dd}.zip
            </fileNamePattern>
            <maxHistory>${maxHistory}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
        </encoder>
    </appender>
    <appender name="FILE_INFO"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <file>${logPath}/cms_info.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logPath}/cms_info.log.%d{yyyy-MM-dd}.zip
            </fileNamePattern>
            <maxHistory>${maxHistory}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="FILE_WARN"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <file>${logPath}/cms_warn.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logPath}/cms_warn.log.%d{yyyy-MM-dd}.zip
            </fileNamePattern>
            <maxHistory>${maxHistory}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
        </encoder>
    </appender>
    <appender name="FILE_ERROR"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <file>${logPath}/cms_error.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logPath}/cms_error.log.%d{yyyy-MM-dd}.zip
            </fileNamePattern>
            <maxHistory>${maxHistory}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="ASYNC_LOG_DEBUG" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丟失日誌.預設的,如果佇列的80%已滿,則會丟棄TRACT、DEBUG、INFO級別的日誌 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改預設的佇列的深度,該值會影響效能.預設值為256 -->
        <queueSize>${queueSize}</queueSize>
        <appender-ref ref="FILE_DEBUG"/>
    </appender>
    <appender name="ASYNC_LOG_INFO" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丟失日誌.預設的,如果佇列的80%已滿,則會丟棄TRACT、DEBUG、INFO級別的日誌 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改預設的佇列的深度,該值會影響效能.預設值為256 -->
        <queueSize>${queueSize}</queueSize>
        <appender-ref ref="FILE_INFO"/>
    </appender>
    <appender name="ASYNC_LOG_WARN" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丟失日誌.預設的,如果佇列的80%已滿,則會丟棄TRACT、DEBUG、INFO級別的日誌 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改預設的佇列的深度,該值會影響效能.預設值為256 -->
        <queueSize>${queueSize}</queueSize>
        <appender-ref ref="FILE_WARN"/>
    </appender>
    <appender name="ASYNC_LOG_ERROR" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丟失日誌.預設的,如果佇列的80%已滿,則會丟棄TRACT、DEBUG、INFO級別的日誌 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改預設的佇列的深度,該值會影響效能.預設值為256 -->
        <queueSize>${queueSize}</queueSize>
        <appender-ref ref="FILE_ERROR"/>
    </appender>
    <root level="${logLevel}">
        <!-- appender referenced after it is defined -->
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="ASYNC_LOG_DEBUG"/>
        <appender-ref ref="ASYNC_LOG_INFO"/>
        <appender-ref ref="ASYNC_LOG_WARN"/>
        <appender-ref ref="ASYNC_LOG_ERROR"/>
    </root>
</configuration>

輸出為:
這裡寫圖片描述