spring Boot (六) logback日誌框架整合

上述篇章基本的調用已經完工了,試想萬一出錯,該從何找問題呢?關鍵日誌記錄也是時候浮出水面了。本篇主要講述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);

以上是我寫的兩個日誌,我們執行項目,看結果
logback
看紅色標記部分,則是我打出的info日誌和error日誌。藍色部分主要是因爲本篇博客我是在家寫的,測試數據使用的公司局域網,把VPN斷掉,druid數據源進行重試連接而打印出的。具體的其他日誌,等回頭項目整個完工,在服務器上打印,看結果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章