Spring Boot 项⽬在启动的时候默认就有⽇志输出,如下图所示:

通过上述⽇志信息我们能发现以下 3 个问题:
开发者⾃定义打印⽇志的实现步骤:
在程序中获取⽇志对象需要使⽤⽇志⼯⼚ LoggerFactory
// 1.得到⽇志对象
private static Logger logger = LoggerFactory.getLogger(UserController.class);
注意:
因为 Spring Boot 中内置了⽇志框架 Slf4j,所以咱们可以直接在程序中调⽤ slf4j 来输出⽇志。
常⻅的⽇志框架:

⽇志对象的打印⽅法有很多种,我们可以先使⽤ info() ⽅法来输出⽇志,如下代码所示:
// 2.使⽤⽇志打印⽇志
logger.info("--------------要输出⽇志的内容----------------");


级别越高接收到的消息就越少,只能收到高于或者等于该级别的日志。如设置了 warn 就只能收到 warn、error、fatal 级别的⽇志了。
⽇志级别设置:
⽇志级别配置只需要在配置⽂件中设置“logging.level”配置项即可,如下所示:
logging:
level:
root: error # 配置根路径的(全局)⽇志级别
logging:
level:
com:
example:
controller: trace # 局部日志设置,位置从 java 包开始,且一般精准到包,不会精准到类,若同时出现全局和局部,则以局部为准
进行日志输出:
@RestController
@RequestMapping("/user")
public class UserController {
// 1.得到⽇志对象
private static Logger logger =
LoggerFactory.getLogger(UserController.class);
@Value("${server.port}")
private String port;
@Value("${spring.datasource.url}")
private String url;
@RequestMapping("/sayhi")
public String sayHi() {
// 2.使⽤⽇志打印⽇志
logger.trace("================= trace ===============");
logger.debug("================= debug ===============");
logger.info("================= info ===============");
logger.warn("================= warn ===============");
logger.error("================= error ===============");
return "Hi," + url;
}
}
⽇志的输出级别,默认是 info.
以上的⽇志都是输出在控制台上的,然⽽在⽣产环境上咱们需要将⽇志保存下来,以便出现问题之后追溯问题,把⽇志保存下来的过程就叫做持久化。
想要将⽇志进⾏持久化,只需要在配置⽂件中指定⽇志的存储⽬录或者是指定⽇志保存⽂件名之后,Spring Boot 就会将控制台的⽇志写到相应的⽬录或⽂件下了。
配置⽇志⽂件的保存路径:
logging:
file:
path: D:\\DevelopTool\\JAVA #自动创建目录
配置⽇志⽂件的⽂件名:
logging:
file:
name: D:\\DevelopTool\\JAVA\\spring-1004.log # 文件存在则会续写,不会覆盖 默认每个文件大小为 10MB, 大于 10MB 则分为多个文件,可以自己设置
存储结果:

每次都使⽤ LoggerFactory.getLogger(xxx.class) 很繁琐,使⽤ lombok 来更简单的输出。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<optional>true</optional>
</dependency>
@RestController
@RequestMapping("/p")
@Slf4j
public class PersonController {
@RequestMapping("/log")
public void loggerTest() {
log.error("------------------- error -----------------");
}
}
注意:使⽤ @Slf4j 注解,在程序中使⽤ log 对象即可输⼊⽇志,并且只能使⽤ log 对象才能输出,这是 lombok 提供的对象名。
lombok 能够打印⽇志的原理就在 target ⽬录⾥⾯,target 为项⽬最终执⾏的代码,查看 target ⽬录如下:

可以发现 lombok 其实只是方便了我们编写,并不会有什么性能的提升,它的原理就是在编译前将注解替换为对应的代码。
Java 程序的运⾏原理:

Lombok 的作⽤如下图所示:

基本注解
| 注解 | 作⽤ |
|---|---|
| @Getter | ⾃动添加 getter ⽅法 |
| @Setter | ⾃动添加 setter ⽅法 |
| @ToString | ⾃动添加 toString ⽅法 |
| @EqualsAndHashCode | ⾃动添加 equals 和 hashCode ⽅法 |
| @NoArgsConstructor | ⾃动添加⽆参构造⽅法 |
| @AllArgsConstructor | ⾃动添加全属性构造⽅法,顺序按照属性的定义顺序 |
| @NonNull | 属性不能为 null |
| @RequiredArgsConstructor | ⾃动添加必需属性的构造⽅法,final + @NonNull 的属性为必需 |
组合注解
| 注解 | 作⽤ |
|---|---|
| @Data | @Getter + @Setter + @ToString +@EqualsAndHashCode +@RequiredArgsConstructor +@NoArgsConstructor |
⽇志注解
| 注解 | 作⽤ |
|---|---|
| @Slf4j | 添加⼀个名为 log 的⽇志,使⽤ slf4j |
好啦! 以上就是 SpringBoot ⽇志⽂件 的讲解,希望能帮到你 !
评论区欢迎指正 !