SpringBoot:底层是Spring框架,Spring框架默认使用的是JCL日志的抽象层
SpringBoot选用SLF4J和logback
如何系统地在系统中使用SLF4J
在开发的使用,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法
SLF4J的使用原理:
遗留问题
当使用多个框架时,不同的框架使用的日志组件不同,这时我们就要统一日志记录,即使是别的框架也要和我们统一使用SLF4J进行输出,如下图:
通过适配jar包将原来框架对这些日志的依赖接触(可以理解为设计模式中的适配器模式),使之可以使用SLF4J进行输出。
所以,如何让系统中所有的日志统一到SLF4J,参照以下几步:
- 将系统中其他日志框架先排除出去;
- 用中间包来替换原有的日志框架;
- 我们再导入SLF4J其他的实现
SpringBoot里面的日志问题
底层依赖关系:
总结:
- SpringBoot底层也是使用SLF4J+logback的方式进行日志记录的
- SpringBoot也把其他的日志替换成了SLF4J
- 如果我们要引入其他框架,一定要把这个框架的默认日志包给移除掉
核心总结:
SpringBoot能自动适配所有的日志框架,而且底层使用SLF4J+logback的方式记录日志,引入其他框架的时候,只需要把这个框架依赖的日志包排除掉。
日志使用
默认配置
SpringBoot默认帮我们配置好了日志
在SpringBoot的测试类下
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class Springboot3ApplicationTests {
//记录器
Logger logger = LoggerFactory.getLogger(getClass());
@Test
void contextLoads() {
//日志的级别:
//由低到高 trace<debug<info<warn<error
//可以调整输出的日志级别,日志就只会在这个级别以后的高级别生效
logger.trace("这时trace日志");//trace是用来跟踪一些信息的
logger.debug("这是debug日志");//debug是用来输出一些调试日志的
logger.info("这是info日志");//info是我们自己定义想要输出的一些信息
logger.warn("这是warn日志");//warn是日志警告信息
logger.error("这是error日志");//error是输出错误信息
}
}
我们可以手动调节日志的级别,只要在配置文件里面设置就行了,如下:
#设置日志输出的级别
logging.level.com.gcl=trace
指定文件路径下生成日志:
# SpringBoot提示logging.file已经过期了
# 但是还有logging.file.name和logging.file.path两个可以使用
logging.file.name=D:/springboot.log
我们现在使用logging.file的话,SpringBoot会提示logging.file已经过期了,所以我们可以使用logging.file.name或logging.file.path来生成日志
logging.file.name不指定路径的话就在当前项目下的根目录生成日志文件
logging.file.path是在当前磁盘的根路径下创建Spring文件夹和里面的log文件,并使用spring.log作为默认文件名,如下:
logging.file.path=/spring/log
如果同时配置上面两个属性:默认只有logging.file.name 生效,会在项目根目录下生成 .log文件
输出日志的格式:
在控制台输出指定的日志格式
# 在控制台输出指定的日志格式
logging.pattern.console=%d{yyyy-MMM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n
在指定文件中日志输出的格式
# 指定文件中日志输出的格式
logging.pattern.file=%d{yyyy-MMM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n