-
實作思路
通過在logback配置檔案中引入yml或properties中的屬性,進而實作通過yml或者properties配置實作logback屬性配置。
-
實作步驟
以application.yml,application-dev.yml檔案為例
1.在application.yml檔案中設定活躍檔案來引用dev。
spring:
profiles:
active: dev
2.在application-dev.yml檔案中設定logback要引用的屬性,以logback.path為例
logback:
path: /home/test
3.在logback-spring.xml檔案中通過springProperty标簽引用application-dev.yml的屬性,注意是logback-spring.xml檔案而不是logback.xml檔案,因為logback.xml檔案早于application.yml加載,logback-spring.xml檔案晚于application.yml檔案加載。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<springProperty scope="context" name="LOG_DIR" source="logback.path"/>
<springProperty scope="context" name="APP_NAME" source="spring.application.name"/>
<property name="FILE_LOG_PATTERN" value="%date [%level] [%thread] [%file : %line] %msg%n" />
<!-- %m輸出的資訊,%p日志級别,%t線程名,%d日期,%c類的全名,%i索引【從數字0開始遞增】,,, -->
<!-- appender是configuration的子節點,是負責寫日志的元件。 -->
<!-- ConsoleAppender:把日志輸出到控制台 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
<!-- 控制台也要使用UTF-8,不要使用GBK,否則會中文亂碼 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- RollingFileAppender:滾動記錄檔案,先将日志記錄到指定檔案,當符合某個條件時,将日志記錄到其他檔案 -->
<!-- 以下的大概意思是:1.先按日期存日志,日期變了,将前一天的日志檔案名重命名為XXX%日期%索引,新的日志仍然是demo.log -->
<!-- 2.如果日期沒有發生變化,但是目前日志的檔案大小超過1KB時,對目前日志進行分割 重命名-->
<appender name="fileServiceLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_DIR}/${APP_NAME}.log</File>
<!-- rollingPolicy:當發生滾動時,決定 RollingFileAppender 的行為,涉及檔案移動和重命名。 -->
<!-- TimeBasedRollingPolicy: 最常用的滾動政策,它根據時間來制定滾動政策,既負責滾動也負責出發滾動 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 活動檔案的名字會根據fileNamePattern的值,每隔一段時間改變一次 -->
<!-- 檔案名:log/demo.2017-12-05.0.log -->
<fileNamePattern>${LOG_DIR}/%d{yyyy/MM/dd}/${APP_NAME}.%d{yyyy-MM-dd}(%i).log</fileNamePattern>
<!-- 注意,maxHistory代表的是最大存檔檔案的數量,不是存檔期限。達到門檻值時,删除最老的日志 -->
<maxHistory>30</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- maxFileSize:這是活動檔案的大小,預設值是10MB,測試時可改成1KB看效果 -->
<maxFileSize>2000MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<!-- pattern節點,用來設定日志的輸入格式 -->
<pattern>${FILE_LOG_PATTERN}</pattern>
<!-- 記錄日志的編碼:此處設定字元集 - -->
<charset>UTF-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="fileServiceLogError" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_DIR}/${APP_NAME}-error.log</File>
<!-- rollingPolicy:當發生滾動時,決定 RollingFileAppender 的行為,涉及檔案移動和重命名。 -->
<!-- TimeBasedRollingPolicy: 最常用的滾動政策,它根據時間來制定滾動政策,既負責滾動也負責出發滾動 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 活動檔案的名字會根據fileNamePattern的值,每隔一段時間改變一次 -->
<!-- 檔案名:log/demo-error.2017-12-05.0.log -->
<fileNamePattern>${LOG_DIR}/%d{yyyy/MM/dd}/${APP_NAME}-error.%d{yyyy-MM-dd}(%i).log</fileNamePattern>
<!-- 注意,maxHistory代表的是最大存檔檔案的數量,不是存檔期限。達到門檻值時,删除最老的日志 -->
<maxHistory>30</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- maxFileSize:這是活動檔案的大小,預設值是10MB,測試時可改成1KB看效果 -->
<maxFileSize>50MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<!-- pattern節點,用來設定日志的輸入格式 -->
<pattern>${FILE_LOG_PATTERN}</pattern>
<!-- 記錄日志的編碼:此處設定字元集 - -->
<charset>UTF-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 控制台輸出日志級别 -->
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="fileServiceLog" />
<appender-ref ref="fileServiceLogError" />
</root>
<!-- 指定項目中某個包,當有日志操作行為時的日志記錄級别 -->
<!-- com.xxx為根包,也就是隻要是發生在這個根包下面的所有日志操作行為的權限都是DEBUG -->
<!-- 級别依次為: TRACE < DEBUG < INFO < WARN < ERROR < ALL /OFF -->
<logger name="java.sql" value="DEBUG" />
<logger name="com.ibatis" value="DEBUG" />
<logger name="com.xxx" level="DEBUG">
<appender-ref ref="fileServiceLog" />
<appender-ref ref="fileServiceLogError" />
</logger>
</configuration>