SpringBoot 日志系列:(一)日志类型

    • 一、为什么要用日志?
    • 二、日志类型
    • 三、日志级别
    • 四、logback 日志使用方式


一、为什么要用日志?

以前总是通过 System.out.println("重要数据") 在控制台输出各种重要数据,但到了真实开发环境才发现日志是极其重要的东西。无论是在开发环境还是正式环境,日志都是定位 bug 和解决 bug 的重要信息。

日志能干的事情很多,能够定位问题,解决问题,是最大的功能点:

  • 记录一切: 日志帮助我们记录程序功能都干了什么,无论是正常的输入输出还是出现异常,都可以用日志记录
  • 定位问题: 日志可以帮助程序员调试问题,帮助测试人员定位问
  • 记录分析用户行为: 统计分析师用来记录用户的一起行为,用于分析用户的习惯和商业价值
  • 备份和还原实时数据: 数据库工程师用来作为一种特殊的数据库

二、日志类型

日志类型有很多,比如 JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j…

主要分为抽象层和实现层:

日志抽象层 日志实现
JCL(Jakarta Commons Logging) SLF4j(Simple Logging Facade for Java) jboss-logging Log4j , JUL , Log4j2 , Logback

抽象层:

  • JCL:不使用,从2014年开始就没更新过了。
  • jboss-logging:不使用,使用场景有限。
  • SLF4j:springboot中使用的日志抽象层。

实现层:

  • Log4j
  • Log4j2:apache 借 Log4j 之名写的一个日志框架,并不是 Log4j 的升级版。太高端了,很多框架适配不了。
  • Logback:Log4j 的升级版本,和 SLF4j 出自同一个人之手。Spring Boot 约定的默认配置。

Logback是Log4j的升级版本出至于同一个人开发的。

SpringBoot选用 SLF4j 和 Logback。大部分场景推荐 Spring Boot 自带的日志 logback。 在 Spring Boot 中,logback 是基于 slf4j 实现的。


三、日志级别

日志级别从低到高分为:TRACE < DEBUG < INFO < WARN < ERROR

如果设置为 WARN ,则低于 WARN 的信息都不会输出。
同理,当我们指定日志级别为 INFO 级别,那么 TRACE、DEBUG 级别的日志就不会被输出打印。

Spring Boot 中默认配置 ERROR、WARN 和 INFO 级别的日志输出到控制台。


四、logback 日志使用方式

方式一:

引入logback依赖:

<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-loggingartifactId>
dependency>

但是实际开发中不需要直接添加该依赖。spring-boot-starter 包含了 spring-boot-starter-logging,该依赖内容就是 Spring Boot 默认的日志框架 logback。

示例:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class LogApplication {

    public static void main(String[] args) {
        Logger logger =LoggerFactory.getLogger(LogApplication.class);
        SpringApplication.run(LogApplication.class, args);
        logger.debug("This is a debug message");//注意 spring 默认日志输出级别为 info 所以默认情况下 这句不会打印到控制台
        logger.info("This is an info message");
        logger.warn("This is a warn message");
        logger.error("This is an error message");
    }
}

运行日志:

2019-07-10 23:51:49.225  INFO 3906 --- [           main] com.fishpro.log.LogApplication           : Started LogApplication in 1.688 seconds (JVM running for 2.317)
2019-07-10 23:51:49.226  INFO 3906 --- [           main] com.fishpro.log.LogApplication           : This is an info message
2019-07-10 23:51:49.227  WARN 3906 --- [           main] com.fishpro.log.LogApplication           : This is a warn message
2019-07-10 23:51:49.227 ERROR 3906 --- [           main] com.fishpro.log.LogApplication           : This is an error message

要想 debug 级别的日志能打印出来,就得配置日志级别。
默认是不需要单独配置 logback 依赖的,因为依赖包已经配置好了。


方式二:

每次都要写这行代码 Logger logger =LoggerFactory.getLogger(类名.class); ,觉得麻烦的话,也有下面这种使用方法:

  • 添加 lombok 的依赖 org.projectlombok:lombok
  • 安装 lombok 的依赖
  • 代码:
    SpringBoot 日志系列:(一)日志类型_第1张图片
  • 可以使用{} 占位符来拼接字符串,而不需要使用““+””来连接字符串。

你可能感兴趣的:(springboot,spring,boot)