先说废话。SpringBoot(使用的2.0.6.RELEASE版本) 的日志默认使用slf4j+logback。引入web启动器的时候,默认会通过spring-boot-starters导入logging启动器。 快速使用的目的是配置最少的情况下满足最基本的日志需求。本次只需在application.properties中配置一个参数即可,其余可全部使用默认配置。
配置 logging.file,即可实现最基本的日志需求(补充:近来偶然发现高版本的SpringBoot中logging.file过时了,要使用 logging.file.name,功能一样)。配置后会在项目所在磁盘根目录下生成对应的目录和日志文件。不配置的话没有该效果。配置如下:
logging.file=/centralCanteenParent/webUser.log配置后看效果。
先来看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日的日志。
当然,你可以选择设置 文件大小限制 及 日志保留天数。 然后说下这个 ${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日志的默认配置,但那已不在本篇快速使用讨论的范围之内了。