目录
配置文件
spring boot 的配置文件有两种格式,分别是 properties 和 yml(yaml)。这两种格式的配置文件是可以同时存在的,此时会以 properties 的文件为主,但一般都是使用同一种格式的。
格式
properties 语法格式:key=value
配置项的分类:1. 系统配置项,比如 server.port,这是系统规定的。2. 用户自定义配置(非系统配置项),这是程序猿自定义的。
读取配置文件:@Value("${key}")的方式。 如果不是 ${key} 的格式,那么程序会认为 key 是你想要表示的字符串,而不会根据 key 找到对应的 value。
优点
-
系统默认的配置文件,生成项目的时候就自带了
-
properties 的优先级比 yml 高
-
易读性高,易上手,不容易出错
缺点
写法比较冗余(比如要连接数据库时 spring.datasource 一行都不能少)
yml 语法格式:key: value
跟 properties 没啥区别,语法上 yml 更加简洁,特别是配置很多的时候 yml 就显得清晰明了,易读性变得更好。
因为 yml 的这种灵活的格式,所以可以表现的数据类型也更多,比如可以表示一个对象:
读取的时候,@ConfigurationProperties("key")、@Component、@Setter 这三个注解少一个程序就运行不起来。
properties 和 yml 的对比
● properties 是以 key=value 的形式配置的键值类型的配置⽂件,⽽ yml 使⽤的是类似 json 格式的树形配置⽅式进⾏配置的,yml 层级之间使⽤换⾏缩进的⽅式配置,key 和 value 之间使⽤": "英⽂冒号加空格的⽅式设置,并且空格不可省略。
● properties 为早期并且默认的配置⽂件格式,但其配置存在⼀定的冗余数据,使⽤ yml 可以很好的解决数据冗余的问题。
● yml 通⽤性更好,⽀持更多语⾔,如 Java、Go、Python 等,如果是云服务器开发,可以使⽤⼀份配置⽂件作为 Java 和 Go 的共同配置⽂件。
● yml ⽀持更多的数据类型。
日志
日志可以用来发现和定位报错问题。也可以记录⽤户登录⽇志,⽅便分析⽤户是正常登录还是恶意破解⽤户。记录系统的操作⽇志,⽅便数据恢复和定位操作⼈。记录程序的执⾏时间等。
日志打印
- 先得到日志对象(选择 slf4j )
- 使用日志对象提供的方法打印日志
日志级别
日志级别 | 级别描述及应用场景举例 |
---|---|
trace | 微量,少许的意思,级别最低; 系统内部细微流程追踪,如函数内多次循环中每次的具体变化 |
debug | 需要调试时候的关键信息打印; 开发中调试具体代码逻辑、变量状态等,如某段复杂算法执行细节 |
info | 普通的打印信息(默认⽇志级别); 系统启动、重要业务流程关键节点记录,如服务成功开启 |
warn | 警告,不影响使⽤,但需要注意的问题; 资源接近阈值、潜在的数据问题等,如缓存命中率偏低 |
error | 错误信息,级别较⾼的错误⽇志信息; 数据处理错误、文件操作失败等,如读取文件异常 |
fatal | 致命的,因为代码异常导致程序退出执⾏的事件; 关键资源耗尽、严重错误导致程序终止,如内存溢出导致崩溃 |
设置日志级别
在配置文件里面设置:
日志持久化
把⽇志保存下来的过程就叫做持久化,就是以前的信息都保留下来了。想要将⽇志进⾏持久化,只需要在配置⽂件中指定⽇志的 存储路径 或者是指定⽇志 保存文件名之后,Spring Boot 就会将控制台的⽇志写到相应的⽬录或⽂件下了。
配置日志文件的文件名:
配置日志文件的存储路径:
当项目运行的时间足够长,生成的日志信息内存大于 10 MB 的时候,spring boot 就会自动生成一个新的日志文件(官方默认的,大小也可以自己设置)。
更简单的日志输出---lombok
- 确保 添加了 lombok 框架⽀持。
- 使用 @slf4j 注解输出日志。
java
package com.example.springbootdemo.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController // @Controller + @ResponseBody 的合体
@Slf4j // 给当前类中添加一个叫做 log 的日志对象(= SLF4J 里面提供 Logger)
public class LogController {
@RequestMapping("/log/say")
public String say() {
log.info("我是 log 的 info");
log.error("我是 log 的 error");
return " log say ";
}
}
使用 @slf4j 这个注解就不用写长长的 private static final Logger log = LoggerFactory.getLogger(TestController.class); 这一串了。
关于 Lombok 注解的原理:在编译的过程中,Lombok 会自动地往代码添加注解所对应的部分。