SpringBoot學習(三)--Spring profile多環境方式實現logback日誌配置
阿新 • • 發佈:2019-02-15
繼上一篇搭建基礎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>
輸出為: