作者:~小明学编程
文章专栏:spring框架
格言:热爱编程的,终将被编程所厚爱。
目录
为什么需要日志
如何使用日志功能
日志的打印
获取日志对象
使用日志对象打印日志
日志级别
为什么我们需要把日志分为如此多的种类呢?
如何设置打印日志的级别
持久化日志
日志输出
前面我们介绍了如何创建我们的springboot项目以及springboot中的一些配置信息,接下来本章主要介绍的是springboot中的一个重要的功能那就是springboot中的日志功能。
为什么需要日志
我们在写代码的时候不可避免的会遇到bug在我们遇到bug的时候首先我们想到的就是去调试我们的代码,但是对于一个项目来说它的代码量是非常的大的咱们总不能从头开始去调试吧,我们首先需要定位到出现问题的部分然后再去调试那一块的代码,所以我们想要定位问题最快的方法就是去查看日志。
如何使用日志功能
上面这幅图是我们刚启动我们的springboot项目的时候所打印出来的东西,这就是我们的日志,里面记录了我们的一些信息,比如我们启动的时间,或者一个方法运行完毕的时间。
日志的打印
想要打印日志需要有一下的步骤:
- 在一个类中先获取到日志打印对象(日志框架提供的日志对象,而日志加已经默认集成到 Spring Boot 当中了)。
- 使用日志对象提供的方法实现日志的打印。
获取日志对象
private final static Logger log = LoggerFactory.getLogger(UserController.class);
通过 Logger 类来得到日志对象,使用 slf4j 提供的日志对象,我们需要把类名给传进去这样是为了我们在打印日志内容的时候会将我们的相关的类信息也给打印出来。
使用日志对象打印日志
public class UserController {
private final static Logger log = LoggerFactory.getLogger(UserController.class);
@RequestMapping("/sayhi")
public void sayHi() {
log.trace("你好,trace");
log.debug("你好debug");
log.info("info");
log.warn("warn");
log.error("error");
}
}
日志级别
日志的级别分为以下这几种:
trace:微量,少许的意思,级别最低
debug:需要调试时候的关键信息打印(调试日志)
info:普通的打印信息(普通信息日志)【系统默认的日志级别】
warn:警告,不影响使⽤,但需要注意的问题(警告日志)
error:错误信息,级别较⾼的错误⽇志信息(错误日志)
fatal:致命的,因为代码异常导致程序退出执⾏的事件。
为什么我们需要把日志分为如此多的种类呢?
1.⽇志级别可以帮我们筛选出重要的信息,⽐如设置⽇志级别为 error,那么就可以只看程序的报错⽇志了,对于普通的调试⽇志和业务⽇志就可以忽略了,从⽽节省开发者信息筛选的时间。
2.⽇志级别可以控制不同环境下,⼀个程序是否需要打印⽇志,如开发环境我们需要很详细的信息,⽽⽣产环境为了保证性能和安全性就会输⼊尽量少的⽇志,⽽通过⽇志的级别就可以实现此需求。
如何设置打印日志的级别
我们可以在配置文件中去设置我们的日志的级别:
logging.level.root=info
上面我们在根路径中设置了info级别的日志,这样我们就会打印info以及一下级别的日志了。
当然我们也可以对指定路径的文件设置相应的级别,这里我们遵从局部大于整体的级别。
logging.level.java.com.example.dome.controller.DomeApplication=info
持久化日志
前面我们都是在控制台去查看日志的,但是这种方式肯定不适用于大型的项目,我们在开发的时候不可能去一直的去查控制台的,我们需要有一个文件将我们的日志给永久的保存下来这样我们才能够方便的查找。
logging.file.path=D:/.1logger/
上述我们就将我们的日志给保存到了D盘的一个文件的路径下面去了。
接着我们就可以在我们的文件中找到我们的日志了。
日志输出
要输出日志的话,出了使用 日志对象,还可以使用 lombok 提供的 @Slf4j 注解,注解自动生成的对象是 log,这样就代替了我们LoggerFactory再去得到一个日志对象了。
@Controller
@ResponseBody
@Slf4j
public class UserController {
// private final static Logger log = LoggerFactory.getLogger(UserController.class);
@RequestMapping("/sayhi")
public void sayHi() {
log.trace("你好,trace");
log.debug("你好debug");
log.info("info");
log.warn("warn");
log.error("error");
}
}
注解只是帮助我们省去了得到log的那一步。
Lombok 的其他注解:
注解 | 作 |
@Getter | 动添加 getter 法 |
@Setter | 动添加 setter 法 |
@ToString | 动添加 toString 法 |
@EqualsAndHashCode | 动添加 equals 和 hashCode 法 |
@NoArgsConstructor | 动添加参构造法 |
@AllArgsConstructor | 动添加全属性构造法,顺序按照属性的定义顺序 |
@NonNull | 属性不能为 null |
@RequiredArgsConstructor | 动添加必需属性的构造法,final + @NonNull 的 属性为必需 |