这篇文章是边听尚硅谷的课程边记的笔记,也是为了之后方便查看,视频链接:https://www.bilibili.com/vide...

1. 精彩的故事

小张负责一个大型系统的开发,为了监控系统的运行状况,系统中包含大量的System.out.println()语句,为了更好地管理呢,小张决定写一个日志框架对日志进行管理,他设想的日志框架应该包含以下几个功能:

  1. 日志应该能分为不同的等级
  2. 日志应该按天保存在文件中

在此基础上小张开发出了这样一个日志框架,但是为了使用这个日志框架,当小张修改了这个日志框架中的内容之后,系统中相关的代码都需要进行修改。为此,小张想到了一种模式:
小张为所有的日志框架写了一个统一的接口层:日志门面(抽象层),该日志门面定义了通用的功能接口,具体的实现可以有不同的实现

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进行日志记录??

clipboard.png

解决方案:
  1. 将系统中其他日志框架先排除掉
  2. 用中间包来替换原有的日志框架
  3. 再导入slf4j的其他的实现

5. SpringBoot日志关系

  1. spring-boot-starter
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
  1. sring-boot-starter-logging
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </dependency>

clipboard.png

总结:

  1. SpringBoot底层也是使用slf4j+Logback的方式进行日志记录;
  2. SpringBoot也把其他的日志框架替换成了slf4j
  3. 如果我们引入了其他框架,一定要把这个框架的默认日志框架移除掉
        <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 

Helen
50 声望4 粉丝

千里之行,始于足下