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);
以上是我写的两个日志,我们执行项目,看结果
看红色标记部分,则是我打出的info日志和error日志。蓝色部分主要是因为本篇博客我是在家写的,测试数据使用的公司局域网,把VPN断掉,druid数据源进行重试连接而打印出的。具体的其他日志,等回头项目整个完工,在服务器上打印,看结果。