1、快速使用说明
先说废话。SpringBoot(使用的2.0.6.RELEASE版本) 的日志默认使用slf4j+logback。引入web启动器的时候,默认会通过spring-boot-starters导入logging启动器。
快速使用的目的是配置最少的情况下满足最基本的日志需求。本次只需在application.properties中配置一个参数即可,其余可全部使用默认配置。
2、配置项
配置 logging.file,即可实现最基本的日志需求(补充:近来偶然发现高版本的SpringBoot中logging.file过时了,要使用 logging.file.name,功能一样)。配置后会在项目所在磁盘根目录下生成对应的目录和日志文件。不配置的话没有该效果。配置如下:
logging.file=/centralCanteenParent/webUser.log
配置后看效果。
3、解释说明
先来看SpringBoot默认的logback的配置文件位置。
看file-appender.xml文件。
<?xml version="1.0" encoding="UTF-8"?>
<!--
File appender logback configuration provided for import, equivalent to the programmatic
initialization performed by Boot
-->
<included>
<appender name="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
<file>${LOG_FILE}</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
<maxFileSize>${LOG_FILE_MAX_SIZE:-10MB}</maxFileSize>
<maxHistory>${LOG_FILE_MAX_HISTORY:-0}</maxHistory>
</rollingPolicy>
</appender>
</included>
LOG_FILE 对应 logging.file ,指的是日志输出的文件名。必须配置才有图中的效果。这个属性对应的值也正是我们需要根据项目自己设置的。
LOG_FILE_MAX_SIZE 对应 logging.file.max-size, 指的是输出文件大小限制,默认10MB。
LOG_FILE_MAX_HISTORY 对应 logging.file.max-history ,不为0时指的是压缩文件日志保存天数,默认为0,会一直保存。
${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz 这个正是生成的压缩文件的格式。它是按照文件大小限制及日期的滚动策略生成的。
滚动策略:看本文第一张配置后的效果图。先按大小判断,每当webUser.log大于10M时,就会生成一个压缩文件(i从0开始递增),且生成一个压缩文件后,webUser.log文件的内容会清空(之前的日志内容已经保存到了压缩文件中),然后接着记录下面的日志。然后是按照日期判断,当新的一天到来且有新的日志输出时,会直接生成一个压缩文件,然后清空webUser.log文件的内容来记录新的一天的日志(下图说明了这一点)。如此循环滚动。
再次看图说话(对比第一张图),10月4日再次启动项目,9月29日的日志内容被放进压缩包,webUser.log文件清空开始记录10月4日的日志。
4、画足添蛇
当然,你可以选择设置 文件大小限制 及 日志保留天数。
然后说下这个 ${LOG_FILE_MAX_SIZE:-10MB} 的意思吧。使用的是Spring的占位符取值,如果你设置了文件大小限制的值,那么这里就会取到设置的值进行使用,否则就使用默认值10MB。在application.properties中,默认值只需要加个冒号即可,但SpringBoot的日志配置这里必须还要再加一个短横杠(并不是负数的意思),才能表示默认值。
另外,SpringBoot的日志默认root级别是info,所以如果要打印SQL语句,需要配置logging.level.com.food.mapper=DEBUG,其中com.food.mapper是我的数据层包路径。
甚至,你可以自己写一个 logback-spring.xml 文件,放在类路径下,覆盖掉SpringBoot日志的默认配置,但那已不在本篇快速使用讨论的范围之内了。