日志在项目当中,最重要的就是发现和定位问题,然后其它功能如下:
在我们启动项目的时候,就已经输出日志了:

不过这些日志事不能保存下来的,是只能显示在控制台的。说明 Spring Boot 内置了日志框架。默认情况下是输出系统日志。
要实现自定义日志打印,有两步:
通过 Logger 类来得到日志对象,使用 slf4j 提供的日志对象:

private final static Logger log = LoggerFactory.getLogger(UserController.class);
把类名传进去,是为了更好的查看日志输出的时候,是从哪个类里面输出的。然后就可以在方法里面,使用日志对象提供的打印方法来进行日志打印了。
⽇志对象的打印⽅法有很多种(info,error,warn,trace,debug):
@Controller
@ResponseBody
public class UserController {
//1、先得到日志对象,一定要设置当前类的类型
private final static Logger log = LoggerFactory.getLogger(UserController.class);
@RequestMapping("/sayhi")
public void sayHi() {
//2、使用日志对象提供的打印方法进行日志打印
log.trace("track 日志级别最小的一种,少许日志");
log.debug("debug 调试阶段打印日志,调试日志");
log.info("info 普通的打印信息,默认的日志级别");
log.warn("warn 警告日志");
log.error("error 错误日志");
}
}
运行结果如下:

Spring Boot 当中,我们主要用的是 SLF4J 和 logback :

因为 SLF4J和 logback 在日志领域是顶尖的。


通过 配置文件 当中来设置。通过 logging.level 来设置级别:

我们这里设置的是 info 级别,root 就是全局的日志级别:

可以明显的看出,日志的数量更多了。比 info 日志级别低的日志就看不到了。
设置局部文件的日志级别:
logging.level.java.com.example.springboot2.controller=trace
就是通过路径去设置,但是在局部级别的话,是局部优先:

上面的日志都是输出在控制台上面的,然而生存环境需要把日志保存下来,以便出现问题之后追溯问题。也就是将日志持久化:
在配置文件当中设置日志的保存路径,当设置类保存路径之后,那么日志就会自动的进行持久化。
logging.file.path=D:/
就是把日志文件直接保存在 D 盘当中:

也可以用反斜杠转义:
logging.file.path=D:\\
在配置文件中设置日志保存的名称,日志就会自动进行持久化:
logging.file.name=D:/spring-boot.log
日志太大的时候,会自动进行分割:

要输出日志的话,出了使用 日志对象,还可以使用 lombok 提供的 @Slf4j 注解,注解自动生成的对象是 log:
@Controller
@ResponseBody
@Slf4j
public class UserService {
@RequestMapping("/sayhi2")
public void sayHi2() {
log.trace("Lombok trace");
log.debug("Lombok debug");
log.info("Lombok info");
log.warn("Lombok warn");
log.error("Lombok error");
}
}
运行结果如下:

文件如下:

我们的项目在编译的时候,是转化为 class 文件,然后让 JVM 来处理的。也就是在项目编译的时候,lombok 就又替我们转化为原来的日志对象了:

Java 程序的运行原理图:

lombok 的作用图:

Lombok 并不会影响程序的运行速度,提高了开发效率。
基本注解:

组合注解:

日志注解:
