SpringBoot整合Logback日志框架
- 一、前言
- 二、默认日志格式
- 三、配置日志文件
- 1.添加日志配置文件
- 2.自定义日志格式
- 3.日志的归档和清理
- 4.logback-spring.xml文件
- 四、打印sql脚本
- 五、相关链接
一、前言
日志是追溯系统使用记录、跟踪问题的的依据,是系统不可缺少的重要组成部分。在SpringBoot中,默认使用的是Logback日志。如果创建一个项目没有引用其他的日志框架的化。默认使用Logback打印日志,下面简单介绍一下我们如何使用Logback日志框架。
二、默认日志格式
创建一个新项目,直接运行SpringBoot项目后,在控制台中就会生成Logback默认的日志格式,下面简单介绍一下系统默认的打印格式。
- 时间日期:日志打印时间,精确到毫秒。
- 日志级别:ERROR,WARN,INFO,DEBUG,TRACE。
- 进程ID:进程ID指的是当前应用对应的PID。
- 分隔符:–标识实际日志的开始。
- 线程名:方括号括起来(可能会阶段控制台输出)
- Logger名:通常使用源代码的类名
- 日志内容:日志正文
三、配置日志文件
虽然SpringBoot项目配置的默认格式信息非常详细,而且我们正式的项目设置的日志格式也差不太多,但是默认配置的日志信息,只会将日志默认输出到控制台,并不会将日志写入到日志文件中。实际的项目中,肯定是要通过日志文件来分析问题的。所以需要我们自定义日志配置。
1.添加日志配置文件
SpringBoot默认支持使用xml自定义日志格式,只需要在src/main/resources文件夹下定义一个logback-spring.xml
。
SpringBoot官网推荐优先使用带有-spring的文件名作为你的日志配置,如果命名为
logback-spring.xml
,就可以在日志输出的时候引入一些SpringBoot特有的配置项。当然也可以支持自定义日志配置,在application.yml
文件中配置logging.config=classpath:logback-config.xml,就会去读取src/main/resources文件夹下的logback-config.xml
。
2.自定义日志格式
通过上述方式我们添加了配置文件,可以在 logback-config.xml
中添加如下内容。完整的文件内容可以去第4点获取。
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<contextName>logback</contextName>
<!--输出到控制台-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!--输出日志级别-->
<root level="error">
<appender-ref ref="console"/>
<appender-ref ref="logFile" />
</root>
</configuration>
- configuration标签为根节点,包含下面三个属性:
- scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
- scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
- debug: 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
- contextName标签用来设置上下文名称,每个logger都关联到logger上下文,默认上下文名称为default。但可以使用contextName设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改。
- appender:负责写日志的组件
- class="ch.qos.logback.core.ConsoleAppender"表示设置控制台的
- class="ch.qos.logback.core.rolling.RollingFileAppender"表示按天写入日志文件
- pattern标签用于设置每行日志的格式,信息如下:
- %d :输出日志时间,可以使用%d{HH:mm:ss}对日志进行格式化。
- %thread:输出日志的进程名称。
- %-5level:日志级别,并且使用5个字符靠左对齐,也可以使用%p输出日志级别。
- %logger{36}:打印日志的输出者,一般打印那个类打印的日志。
- %msg:日志信息
- %n:换行
- %c:用来在日志上输出类的全名。
3.日志的归档和清理
日志已经有了,但是随着时间推移, 所有的日志放在一个文件也不行,一般来说,生产日志需要按日期进行存档,且对于比较久的日志要进行迁移或者删除,避免出现磁盘占满影响系统正常运行。下面介绍一下,日志的归档和清理。
<!--按天生成日志-->
<appender name="logFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<Prudent>true</Prudent>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件命名-->
<FileNamePattern>
applog/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.log
</FileNamePattern>
<!--保存最近30天的日志,防止磁盘被占满-->
<maxHistroy>30</maxHistroy>
<!--设置最大日志文件大小-->
<maxFileSize>500MB</maxFileSize>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>
%d{yyyy-MM-dd HH:mm:ss} -%msg%n
</Pattern>
</layout>
</appender>
标签说明:
- FileNamePattern:日志文件位置。
- maxHistroy:设置最大的日志保存时间,单位为天。
- maxFileSize:设置最大的日志文件大小,如果超过就会生成新的文件。
4.logback-spring.xml文件
下面是我的项目中使用的一个日志配置文件,大家可以复制到项目中直接使用。
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<contextName>logback</contextName>
<!--输出到控制台-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!--按天生成日志-->
<appender name="logFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<Prudent>true</Prudent>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件命名-->
<FileNamePattern>
applog/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.%i.log
</FileNamePattern>
<!--保存最近10天的日志,防止磁盘被占满-->
<maxHistory>10</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!--设置最大日志文件大小-->
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>
%d{yyyy-MM-dd HH:mm:ss} -%msg%n
</Pattern>
</layout>
</appender>
<!--输出指定包文件的日志-->
<logger name="com.ming" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="logFile" />
</logger>
<!--日志处理级别-->
<root level="error">
<appender-ref ref="console"/>
<appender-ref ref="logFile" />
</root>
</configuration>
四、打印sql脚本
开发测试时,我们常常需要查看被执行的SQL脚本以及输入的参数信息。默认情况是不打印的,如果需要打印,可以在 application.yml
配置文件中
logging:
level:
root: info
com.ming.upms.dao: debug # 改成你的mapper文件所在包路径
五、相关链接
博客的内容是根据平时在写项目代码后的知识点总结。既是对自己的一个总结,也是给大家的一点小小分享,希望大家多多支持!如有问题希望大家多多指教。谢谢!