目录
一、SpringBoot配置文件
配置文件的格式
.properties配置文件格式
.yml配置文件格式
.properties 与 .yml的区别
配置文件的读取
.properties 与 .yml的区别
设置不同环境的配置⽂件
二、SpringBoot日志文件
日志打印的步骤
得到日志对象
方法一:使用日志工厂 LoggerFactory来得到日志对象
方法二:使用lombok可以更加高效的打印日志(推荐使用lombok)
日志级别
⽇志级别设置
日志的持久化
lombok 更多注解说明
基本注解
组合注解
在项目中重要的配置信息都是在配置文件配置的,如果没有配置文件的话,一个项目都不会运行起来。
配置文件里面都包含着连接数据库的用户名和密码、第三方系统的密钥、端口号的设置以及用于发现异常错误信息的普通日志和异常日志。因此配置文件是十分重要的。
Spring Boot项目中配置文件的格式有两种:
- application.properties
- application.yml
appllication.properties配置文件格式比较早,可以理解为老款的配置文件,而application.yml是一种新的配置文件。
注意properties与yml的区别:
理论上properties与yml可以共存在一个项目中,如果当properties与 yml存在一个项目中,并且这两个都配置了相同的配置时,此时项目配置文件以properties为主 ,因为properties的优先级比yml高,但加载完properties配置文件后也会加载.yml配置文件。
注意:在.proerties配置文件中以#来添加注释
.yml配置信息注意:
- 字符串默认不⽤加上单引号或者双引号
单引号会转义特殊字符,特殊字符最终只是⼀个普通的字符串数据。 双引号不会转义字符串⾥⾯的特殊字符;特殊字符会作为本身想表示的意思
1、.properties的优先级比 .yml高。举例来说:当在这两个配置文件都配置了端口号,这两个端口号不相同时,会优先以.properties配置的为主
2、 .properties的配置文件比.yml冗余。
这两个配置文件的数据读取方式都是一样的,使用@Value注解来读取
@Value 注解使⽤“${}”的格式读取
读取代码如下
package com.example.demo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
public class TestYml {
@Value("${string.hello}")
private String hello;
@PostConstruct
public void func(){
System.out.println("配置文件读取结果:"+hello);
}
}
在 yml 中配置对象
使用该注解来读取:@ConfigurationProperties
1、.properties的优先级比 .yml高。举例来说:当在这两个配置文件都配置了端口号,这两个端口号不相同时,会优先以.properties配置的为主
2、 .properties的配置文件比.yml冗余。
3、.properties配置文件形式是key=value,而.yml配置文件是key: value。(冒号后面必须要带有一个空格)
4、yml 通⽤性更好,⽀持更多语⾔,如 Java、Go、Python 等,如果是云服务器开发,可以使⽤⼀份配置⽂件作为 Java 和 Go 的共同配置⽂件
5、yml对中文的兼容性很好,读取中文不会乱码,而.properties对中文的兼容性不是很友好,读取的时候大概率是乱码的
设置在不同的运行环境下的配置文件,主要是为了方便进行部署项目和修改配置文件。
设置不同的带有后缀名字来区分不同的配置文件
2、在application.yml里面修改要具体要调用哪一个配置文件
在项目中,日志文件是十分重要的,它有如下功能:
1、记录⽤户登录⽇志,⽅便分析⽤户是正常登录还是恶意破解用户
2、记录项目中的报错信息
3、记录程序的执行时间 ,方便程序员来进行查看程序执行时间
总之,掌握日志的打印是一项必要的技能
第一步:得到日志对象(Spring Boot 内置了⽇志框架,不然也输出不了⽇志)
第二步:使用日志对象来打印日志
使用方法:将类的类型传入,方便知道日志的归属类,这样可以更好地去定位日志的问题所在。
private static Logger logger = LoggerFactory.getLogger(SpringBootTest.class);
//SpringBootTest为自己创建的类名
@RequestMapping("/hello")
@Controller
@ResponseBody
public class SpringBootTest {
// 获取到日志对象
private static Logger logger = LoggerFactory.getLogger(SpringBootTest.class);
// 使用日志对象去打印日志对象
@RequestMapping("/hi")
public void saiHi(){
logger.trace("trace");
logger.debug("debug");
logger.info("这是一个日志打印:inf0");
logger.warn("warn");
logger.error("error");
}
}
在使用日志工厂LoggerFactory来得到日志对象,需要将每个类都要添加到其中十分麻烦,此时就可以使用lombok来获取日志对象,使用@Slf4j注解
使⽤ @Slf4j 注解,lombok 会自动提供 对象名log,在程序中使⽤ log 对象即可输⼊⽇志,并且 只能使⽤ log 对象才能输出
1)添加 lombok依赖
org.projectlombok
lombok
1.18.20
true
也可以在创建SpringBoot项目的时候添加lombok
2) 使用@Slf4j注解来打印日志对象
@RequestMapping("/hello")
@Controller
@ResponseBody
@Slf4j //使用@Slf4j注解来获取日志对象
public class SpringBootTest {
@RequestMapping("/hi")
public void func(){ //直接拿lombok提供的log对象来打印日志
log.trace("trace");
log.error("error");
log.warn("warn");
}
}
使用注解@Slf4j提供的日志对象log,这样就可以成功打印日志了
当设置了不同的日志级别,我们就可以只看到相对应的日志级别,平时我们比较关注warn 和error级别,因此设置日志级别时为error和warn,这样我们就可以只看到这两个报错信息了。
日志有如下几种:
fatal:致命的,因为代码异常导致程序退出执⾏的事件。
1、级别依次由低到高:trace ---> fatal
2、日志打印只会打印级别高于自己和自己本身的级别,级别低于自己的日志则不会打印
3、级别越高,收到的日志信息就会越来越少,比如设置了warn,则只会收到warn、error和fatal 的日志信息
在配置文件里面设置日志级别
@RequestMapping("/hello")
@Controller
@ResponseBody
@Slf4j //使用@Slf4j注解来获取日志对象
public class SpringBootTest {
@RequestMapping("/hi")
public void func(){ //直接拿lombok提供的log对象来打印日志
// 配置文件里面配置了日志的隔离级别为warn,因此打印日志只会打印warn、error
log.trace("trace");
log.debug("debug");
log.info("info");
log.warn("warn");
log.error("error");
}
}
我们在控制台看到的日志不能被永久的保留下来,当再次运行时就不能看到上一次的日志,因此需要我们希望能把日志能够永久的保留下来。
注解
|
作⽤
|
@Getter
|
⾃动添加 getter ⽅法
|
@Setter
|
⾃动添加 setter ⽅法
|
@ToString
|
自动添加toString方法 |
@EqualsAndHashCode
|
⾃动添加 equals 和 hashCode ⽅法
|
@NoArgsConstructor
|
⾃动添加⽆参构造⽅法
|
@AllArgsConstructor
|
⾃动添加全属性构造⽅法,顺序按照属性的定义顺序
|
@NonNull
|
属性不能为 null
|
@RequiredArgsConstructor
|
⾃动添加必需属性的构造⽅法,final + @NonNull 的
属性为必需
|
注解
|
作⽤
|
@Data
|
@Getter + @Setter + @ToString +
@EqualsAndHashCode +
@RequiredArgsConstructor +
@NoArgsConstructor
|
导入import lombok.Data包后,就可以使用@Data 注解来自动构建一个对象的set和get方法