基本
日志框架
- 框架来记录系统的一些运行时信息,做一个日志框架
- 新功能,如异步模式,自动归档…
- 将以前框架卸下来?换上新的框架,重新修改之前相关的API
- 每次都修改太麻烦,参考JDBC—数据库驱动
- 写了一个统一的几口层;日志门面(日志的一个抽象层)
- 给项目导入具体的日志实现
市面上的日志框架
- JUL、JCL、Jboss-logging、logback、log4j、log4j2…
日志门面(日志的抽象层) | 日志实现 |
---|---|
SLF4j, | Log4j,Logback |
SLF4j | Logback |
- SpringBoot选用SLF4j和logback;
- 底层Spring框架默认是JCL
SLF4j
基本使用原理
- 开发的时候,日志记录方法的调用,要调用日志抽象层里面的方法,不是直接调用实现类
- 导入slf4j的jar和Ligback的实现jar
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloWorld {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(HelloWorld.class);
logger.info("Hello World");
}
}
- 面向SLF4j整合其他框架: 每一个日志的实现框架都有自己的配置文件,使用slf4j以后,配置文件还是做成日志实现框架自己本身的配置文件
3. 统一日志记录(有一些框架自带别的日志记录)
统一日志总结
- 将系统中其他日志框架先排除出去
- 用中间包来替换原有的日志框架(针对其他框架)
- 导入slf4j的其他实现(适配器模式)
springboot中的日志
- 结构图
- springboot底层也是使用slf4j+logback的方式进行日志记录
- springboot也把其他的日志都替换成了slf4j
- 中间包
- 如果要引入其他框架,需要吧这个框架的默认日志依赖移除掉(否则跟中间包里的jar冲突)
- 比如将spring的底层功能加入需要移除commons-logging
<dependency>
<groupId>net.sourceforge.htmlunit</groupId>
<artifactId>htmlunit</artifactId>
<version>${htmlunit.version}</version>
<exclusions>
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
</exclusions>
</dependency>
核心总结
SpringBoot能自动适配所有的日志,而且底层使用slf4j+logback的方式记录日志,引入其他框架的时候,只需要把这个框架依赖的日志框架排除掉
SLF4j使用
使用
- 配置处
# logging等级
logging.level.com.ff=trace
# 不指定路径则在项目下,可以添加路径
# logging.file.name=springboot.log
# 在没设置file.name没设置时生效
# 在当前磁盘的根路径下创建spring文件夹和里面的log文件夹
# 默认文件时spring.log
logging.file.path=/spring/log
# 在控制台输出的日志的格式
#logging.pattern.console= %d{yyyy-MM-dd} [%thread]
# 指定文件中日志输出的格式
#logging.pattern.file=%d{yyyy-MM-dd} [%thread]
- 测试类测试
private org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(getClass());
@Test
void contextLoads() {
//日志的级别(由低到高):trace<debug<info<warn<error
//可以调整输出的日志级别:日志就只会在这个级别以后的高级别生效
//默认info级别
logger.trace("trace日志");
logger.debug("debug日志");
logger.info("info日志");
logger.warn("warn日志");
logger.error("error日志");
}
- 格式
指定配置
- 给类路径下放上每个日志框架自己的配置文件即可,springboot就不使用它的默认配置
- springboot建议使用带-spring后缀的
- logback 是原框架识别
- logback-spring由springboot识别,可以提供高级功能,如根据不同环境不同输出
切换日志框架
- 可按照slf4j的日志适配图,进行相关设置
- 添加适配器,将SLF4j通过适配器实现log4j