写在前面:各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!
先看一下springboot官方对日志都有哪些骚操作:
如上:官方文档对我这种英文字母都不知道有几个的来说,阅读还是有点困难的,型号官方也有中文文档 https://www.springcloud.cc/spring-boot.html#boot-features-logging-format
从上面图大致知道了springboot中的日志基本操作,springboot默认情况下,如果您使用“Starters”,则使用Logback进行日志记录。先直接试一下文件输出。
文件输出:
按照官方文档说的,测试一下:
配置logging.file,日志记录到splog.log文件中:
logging:
file: splog.log
执行一下测试方法(测试环境同之前文章):
@Test
public void collectionTest() {
User user = userService.selectUserOrders(1);
System.out.println(user);
}
发现在项目根目录下多了一个splog.log的文件。
配置logging.path:
logging:
path: D:/log
执行一下测试方法后发现在D盘下新建了一个log文件夹,里面有一个默认文件叫spring.log。
测试结果:默认情况下Spring Boot将日志输出到控制台,不会写到日志文件,logging.file和logging.path属性不能同时使用,同时使用只有logging.file生效。
可以看到这种方式配置简单,但是能实现的功能也非常有限,如果想要更复杂的需求,就需要下面的定制化配置了。
自定义日志配置:
先看下官方关于日志配置文件的介绍:
Spring Boot官方推荐优先使用带有-spring的文件名作为你的日志配置(如使用logback-spring.xml,而不是logback.xml),使用logback.xml为配置文件名,它会直接被logback识别加载,而使用-spring变体的文件名,logback框架识别不了,而springboot会识别到并解析日志配置,另外使用-spring
变体进行日志文件可以使用springboot的Prefile等高级功能,官方文档也有说:
当然你也可以使用自定义的名称,比如logback-config.xml,只需要在application.properties文件中使用logging.config=classpath:logback-config.xml指定即可,但是作为一个听话,遵纪守法的宝宝,还是听从spring官方的建议吧!
官方对于logback的扩展介绍了两个:1.特定于配置文件的配置 2.环境属性
先看下特定于配置文件的配置
从这三个官方示例可以看出<springProfile>标签可以指定某段配置只在某个环境下生效。例如:平时我们开发用的是开发环境配配置文件,上线后使用生成环境的配置文件,开发环境为了方便调试,可能会启用debug级别的日志记录,而生成环境我们只需要记录error级别的日志,毕竟主要是要记录错误信息进行错误定位,这时候就可以使用<springProfile>标签分别指定每个环境下用的日志配置。
大体了解了一下springboot关于日志配置的基本功能,我们接下来看下springboot默认配置都为我们做了些啥,我使用的是开发工具是idea,可以从External Libraries-springboot-logging-logback文件包中看到springboot为我们做的事,先看下base.xml文件:
如上:它为我们引入了三个配置文件,defaults.xml,console-appender.xml和file-appender.xml文件,从字面意思 就可知道这三个文件的作用,defaults.xml文件引入了默认配置,console-appender.xml文件是日志打印到控制台的appender配置,file-appender.xml文件是日志记录到文件的appender配置,再看下defaults.xml都配置了些啥玩意:
其中定义了两个变量CONSOLE_LOG_PATTERN和FILE_LOG_PATTERN,分别定义了日志打印到控制台和记录到文件中的默认格式,这个量变量会在console-appender.xml和file-appender.xml文件中引用,再看下file-appender.xml:
如上:file-appender.xml文件中的默认配置是不是很熟悉,在上一篇我们已经把logback常用的配置标签的含义都详细的记录了下来,如果对logback配置不熟悉的小伙伴,可以先看上一篇:springboot整合logback(一)---logback.xml常用标签、属性说明,看下这个默认配置帮我们定义了一个使用RollingFileAppender将日志写入文件类,我们知道RollingFileAppender具有日志轮转功能,当达到一定条件后,会对日志文件进行一定的处理,如:新增一个文件或者删除指定的文件等操作,具体的控制是由<rollingPolicy>标签控制的,而SizeAndTimeBasedRollingPolicy可以按照时间和大小对日志进行处理,如上的springboot默认配置的含义为:将日志按照FILE_LOG_PATTERN格式记录到LOF_FILE文件中(文件名形如:mylog.2020-01-01.0.gz),每个日志文件的最大空间为10M,当天的日志文件达到10M以后,会再另起一个文件进行日志记录,此时文件名变为mylog.2020-01-01.1.gz.
顺便再看下console-appender.xml,这个文件的含义就不说了,如下:
其实springboot2.X之后(我用的是2.1.6版本),对于logback的默认配置几乎满足了我们平时的需求,甚至没有特别需求直接使用默认配置都可以,或者有个别配置不满足我们的要求,可以在yml文件中直接配置,对默认配置进行覆盖,如我们对默认日志文件大小为10M不满意,感觉太小,可以直接在boot的配置文件中进行覆盖配置,如下我们修改为100M:
level:
file:
max-size: 100MB
再或者你习惯单独使用一个配置文件对日志文件进行配置也是可以的,你可以按照spring推荐的命名规范定义一个文件,对logback进行配置,如定义一个文件名为logback-spring.xml的文件,在文件里进行配置都是可以的。