上述篇章基本的調用已經完工了,試想萬一出錯,該從何找問題呢?關鍵日誌記錄也是時候浮出水面了。本篇主要講述SpringBoot整合logback日誌框架。
其實兩者結合很簡單,只需要配置一下logback.xml文件則可以完成主要問題。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--%m輸出的信息,%p日誌級別,%t線程名,%d日期,%c類的全名,%i索引【從數字0開始遞增】,,,-->
<property name="log.default_pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS}|%-5level|%X{traceId}|%logger{1}|%msg%n"/>
<property name="log.default_max_history" value="14"/>
<property name="log.default_charset" value="UTF-8"/>
<property name="log.home" value="logs"/>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!--輸出日誌格式-->
<pattern>${log.default_pattern}</pattern>
<charset>${log.default_charset}</charset>
</encoder>
</appender>
<!--RollingFileAppender:滾動記錄文件,先將日誌記錄到指定文件,當符合某個條件時,將日誌記錄到其他文件-->
<appender name="info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.home}/info.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.home}/archives/info.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>${log.default_max_history}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.default_pattern}</pattern>
<charset>${log.default_charset}</charset>
</encoder>
</appender>
<appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level>
</filter>
<file>${log.home}/error.log</file>
<!--rollingPolicy:當發生滾動時,決定 RollingFileAppender 的行爲,涉及文件移動和重命名-->
<!--TimeBasedRollingPolicy: 最常用的滾動策略,它根據時間來制定滾動策略,既負責滾動也負責出發滾動-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--活動文件的名字會根據fileNamePattern的值,每隔一段時間改變一次-->
<fileNamePattern>${log.home}/archives/error.%d{yyyy-MM-dd}.log</fileNamePattern>
<!--每產生一個日誌文件,該日誌文件的最大保存期限-->
<maxHistory>${log.default_max_history}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.default_pattern}</pattern>
<charset>${log.default_charset}</charset>
</encoder>
</appender>
<!-- 數據庫日誌 -->
<appender name="db_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.home}/db_info.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.home}/archives/db_info.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>${log.default_max_history}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.default_pattern}</pattern>
<charset>${log.default_charset}</charset>
</encoder>
</appender>
<!-- 請求日誌 -->
<appender name="request" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.home}/request.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.home}/archives/request.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>${log.default_max_history}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.default_pattern}</pattern>
<charset>${log.default_charset}</charset>
</encoder>
</appender>
<!--控制檯輸出日誌級別-->
<root level="INFO">
<appender-ref ref="console"/>
<appender-ref ref="info"/>
<appender-ref ref="error"/>
</root>
<!--指定項目中某個包,當有日誌操作行爲時的日誌記錄級別-->
<!--級別依次爲【從高到低】:FATAL > ERROR > WARN > INFO > DEBUG > TRACE-->
<logger name="request" level="INFO" additivity="false">
<appender-ref ref="request"/>
</logger>
<logger name="db_info" level="INFO" additivity="false">
<appender-ref ref="db_info" />
<appender-ref ref="console" />
</logger>
</configuration>
項目我主要記錄了console,info,error,db_info,request等相關日誌需求,平時主要的應用還是info,error,request偏多一點。
logback.xml配置文件搭建完工,我主要就是在com.exam.api.service中對info和error進行了一下簡單測試。
public boolean saveExamBase(String examName, int subjectId) {
Exam exam = new Exam();
exam.setExamName(examName);
exam.setSubjectId(subjectId);
logger.info("saveExamBase examName {}", examName);
//beetlsql保存,手動sql保存信息功能
//examBaseDao.saveExamBaseInfo(examName,subjectId);
try {
//調用beetlSQL API接口 insert功能
examBaseDao.insert(exam);
} catch (Exception e) {
logger.error("saveExam is error", e);
}
return true;
}
logger.info("saveExamBase examName {}", examName);
logger.error("saveExam is error", e);
以上是我寫的兩個日誌,我們執行項目,看結果
看紅色標記部分,則是我打出的info日誌和error日誌。藍色部分主要是因爲本篇博客我是在家寫的,測試數據使用的公司局域網,把VPN斷掉,druid數據源進行重試連接而打印出的。具體的其他日誌,等回頭項目整個完工,在服務器上打印,看結果。