这个是Spring Boot的启动器,我们点击spring-boot-starter
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency>这个spring-boot-starter-logging就是Spring Boot用来做日志功能的
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </dependency>底层依赖关系
通过这张图我们能总结出
Spring Boot底层也是使用slf4j+logback的方式进行日志记录
Spring Boot也把其他的日志都替换成了slf4j;
那么Spring Boot是如何将这些日志都替换成slf4j的呢?我们找到其中的一个jcl-over-slf4j
我们可以看到里面有个commons.logging,里面实现的正是SLF4JLogFactory
@SuppressWarnings("rawtypes") public abstract class LogFactory { static String UNSUPPORTED_OPERATION_IN_JCL_OVER_SLF4J = "http://www.slf4j.org/codes.html#unsupported_operation_in_jcl_over_slf4j"; static LogFactory logFactory = new SLF4JLogFactory();那么我们如果要引入其它框架,一定要把这个框架的默认日志依赖移除掉。
Spring Boot用的是commons-logging
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency>SpringBoot能自动适配所有的日志,而且底层使用slf4j+logback的方式记录日志,引入其他框架的时候,只需要把这个框架依赖的日志框架排除掉即可;
日志使用 默认配置Spring Boot默认帮我们配置好了日志;日志有五种级别,由低到高是trace<debug<info<warn<error,可以调整输出的日志级别;日志就只会在这个级别及以后的高级别生效,Spring Boot默认给我们使用的是info级别的,没有指定级别的就用SpringBoot默认规定的级别;root级别
为什么也叫root级别呢,依次点击文件目录下的这些文件
graph LR A[External Libraries]-->B[springframework.boot.spring-boot] B-->C[org] C-->D[springframework] D-->E[boot] E-->F[logging] F-->G[logback] G-->H[base.xml]