这篇文章是边听尚硅谷的课程边记的笔记,也是为了之后方便查看,视频链接:https://www.bilibili.com/vide...
1. 精彩的故事
小张负责一个大型系统的开发,为了监控系统的运行状况,系统中包含大量的System.out.println()语句,为了更好地管理呢,小张决定写一个日志框架对日志进行管理,他设想的日志框架应该包含以下几个功能:
- 日志应该能分为不同的等级
- 日志应该按天保存在文件中
在此基础上小张开发出了这样一个日志框架,但是为了使用这个日志框架,当小张修改了这个日志框架中的内容之后,系统中相关的代码都需要进行修改。为此,小张想到了一种模式:
小张为所有的日志框架写了一个统一的接口层:日志门面(抽象层),该日志门面定义了通用的功能接口,具体的实现可以有不同的实现
2. 市面上的日志框架
日志门面(日志抽象层) | 日志实现 |
---|---|
Jakarta Commons Logging(不再更新),jboss-logging(生来不为普通程序猿所用), slf4j | log4j(落后),java.util.Logging(不好用),Logback,Log4j2(与Log4j开发不是同一人) |
最终选择:日志门面:slf4j 日志实现:Logback
3. slf4j
- 如何在系统中使用slf4j,在系统中导入slf4j和logback的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后,配置文件还是使用日志实现框架自己本身的配置文件
4. 日志框架兼容问题
假如我现在开发A系统用的日志框架是slf4j+logback,但是开发系统时用到了spring框架(框架本身的日志记录依赖common-logging),Hibernate(jboss),Mybatis....那么我这个系统如何统一使用slf4j+logback进行日志记录??
解决方案:
- 将系统中其他日志框架先排除掉
- 用中间包来替换原有的日志框架
- 再导入slf4j的其他的实现
5. SpringBoot日志关系
- spring-boot-starter
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
- sring-boot-starter-logging
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
总结:
- SpringBoot底层也是使用slf4j+Logback的方式进行日志记录;
- SpringBoot也把其他的日志框架替换成了slf4j
- 如果我们引入了其他框架,一定要把这个框架的默认日志框架移除掉
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
6. SpringBoot日志使用
1. 默认配置
SpringBoot默认给我们配置好了日志,可以直接使用,默认的日志级别是info;
Logger logger = LoggerFactory.getLogger(getClass());
@Test
public void contextLoads() {
/*日志级别trace<debug<info<warn<error*/
logger.trace("这是trace日志");
logger.debug("这是debug日志");
logger.info("这是info日志");
logger.warn("这是warn日志");
logger.error("这是error日志");
}
2. 修改日志的配置
# 配置整个项目的日志级别
logging.level.root=debug
# 配置指定包下面的日志级别
logging.level.com.luhuiling=info
# logging.file指定日志文件的名称,如果不指定,日志只在控制台输出
logging.file=D:/springboot.log
# logging.path指定日志文件的路径,如果不指定,文件将存放在项目根目录下
logging.path
# 控制台输出日志的格式
logging.pattern.console
# 文件中输出日志的格式
logging.pattern.file
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。