springboot|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依赖:
org.springframework.boot spring-boot-starter-logging

但是实际开发中不需要直接添加该依赖。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.225INFO 3906 --- [main] com.fishpro.log.LogApplication: Started LogApplication in 1.688 seconds (JVM running for 2.317) 2019-07-10 23:51:49.226INFO 3906 --- [main] com.fishpro.log.LogApplication: This is an info message 2019-07-10 23:51:49.227WARN 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 依赖的,因为依赖包已经配置好了。

方式二:
【springboot|SpringBoot 日志系列:(一)日志类型】每次都要写这行代码 Logger logger =LoggerFactory.getLogger(类名.class); ,觉得麻烦的话,也有下面这种使用方法:
  • 添加 lombok 的依赖 org.projectlombok:lombok
  • 安装 lombok 的依赖
  • 代码:
    springboot|SpringBoot 日志系列:(一)日志类型
    文章图片
  • 可以使用{} 占位符来拼接字符串,而不需要使用““+””来连接字符串。

    推荐阅读