一、为什么要用日志?
以前总是通过 System.out.println("重要数据")
在控制台输出各种重要数据,但到了真实开发环境才发现日志是极其重要的东西。无论是在开发环境还是正式环境,日志都是定位 bug 和解决 bug 的重要信息。
日志能干的事情很多,能够定位问题,解决问题,是最大的功能点:
- 记录一切: 日志帮助我们记录程序功能都干了什么,无论是正常的输入输出还是出现异常,都可以用日志记录
- 定位问题: 日志可以帮助程序员调试问题,帮助测试人员定位问
- 记录分析用户行为: 统计分析师用来记录用户的一起行为,用于分析用户的习惯和商业价值
- 备份和还原实时数据: 数据库工程师用来作为一种特殊的数据库
二、日志类型
日志类型有很多,比如 JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j…
主要分为抽象层和实现层:
日志抽象层 | 日志实现 |
---|---|
|
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 级别的日志输出到控制台。
四、使用方式
简单示例:
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 级别的日志能打印出来,就得配置日志级别。
具体怎么设置,下一系列文章来介绍。