目录
1.日志的作用
⽇志是程序的重要组成部分,当程序出错时,可以查看日志,看问题出现在哪里,用来排除和定位问题
通过⽇志实现还可以具有以下功能:
1)记录⽤户登录⽇志,⽅便分析⽤户是正常登录还是恶意破解⽤户。2)记录系统的操作⽇志,⽅便数据恢复和定位操作⼈3)记录程序的执⾏时间,⽅便为以后优化程序提供数据⽀持
2.日志的用法
Spring Boot 项⽬在启动的时候默认就有⽇志输出,如下图所示:

以上内容就是 Spring Boot 输出的控制台⽇志信息。
通过上述⽇志信息我们能发现以下
3
个问题:
1)Spring Boot 内置了⽇志框架(不然也输出不了⽇志)。2)默认情况下,输出的⽇志并⾮是开发者定义和打印的,那开发者怎么在程序中⾃定义打 印⽇志呢?3)⽇志默认是打印在控制台上的,⽽控制台的⽇志是不能被保存的,那么怎么把⽇志永久的保存下来呢?
3. 自定义日志打印
开发者⾃定义打印⽇志的实现步骤:
1)在程序中得到⽇志对象。
2)使⽤⽇志对象的相关语法输出要打印的内容
3.1 在程序中得到⽇志对象
在程序中获取⽇志对象需要使⽤⽇志⼯⼚ LoggerFactory,如下代码所示
@Controller
@ResponseBody
public class UserController {
//1.先得到日志对象
private final static Logger log =
LoggerFactory.getLogger(UserController.class);
}
注意:Logger 对象是属于 org.slf
4
j 包下的,不要导⼊错包。

常见的日志框架

3.2 使用日志对象打印日志
⽇志对象的打印⽅法有很多种

此处先使⽤⽅法来输出⽇志,如下代码所示
@Controller
@ResponseBody
public class UserController {
//1.先得到日志对象
private final static Logger log =
LoggerFactory.getLogger(UserController.class);
@RequestMapping("/say")
public void say() {
log.trace("trace: 微量日志");
log.debug("debug:调试日志");
log.info("info: 普通日志");
log.warn("warn: 警告日志");
log.error("error: 错误日志");
}
}
运行启动类,打印日志效果展示
trace、dubug 级别比info小,所以直接跳过到info,因为info是默认的日志方式
3.3 日志格式说明

4. 日志级别
从低到高
⽇志的级别分为:trace:微量,少许的意思,级别最低;debug:需要调试时候的关键信息打印;info:普通的打印信息;(默认)warn:警告,不影响使⽤,但需要注意的问题;error:错误信息,级别较⾼的错误⽇志信息;fatal:致命的,因为代码异常导致程序退出执⾏的事件(不需要我们自己打印)
日志使用
配置全局日志级别为最小,trace
#配置全局日志级别
logging.level.root=trace
打印日志如下,就可以全部打印出来
当全局和局部都设置了日志级别时,以局部为准
#配置全局日志级别
logging.level.root=trace
#设置局部文件夹的日志级别
logging.level.com.example.demo.controller=info
4.1 日志持久化
1)在配置文件中设置日志的保存路径,当设置了保存路径之后,日志就会自动的进行持久化
#设置日志的保存 路径
#因为我要保存的路径为 "\IDEA\data",而“\I 和 \d ” 特殊的意义的字符,所以需要两个 "\\"来进行转义
#logging.file.path=D:\\IDEA\\data\
#或者改为“/”
logging.file.path=D:/IDEA/data/
运行查看保存的日志
通过 vscode 打开查看内容
2)在配置文件中设置日志保存的名称,日志就会自动的进行持久化
#设置日志的保存 名称
#保存到该路径下的 spring-boot.log 中
logging.file.name=D:/IDEA/data/spring-boot.log
日志内容如下
5. 更简单的日志输出-lombok
1.
添加 lombok 框架⽀持。
2.
使⽤ @slf
4
j 注解输出⽇志。
5.1 添加插件(第一次配置时需要)
安装好插件之后重启
6.2 添加 lombok 依赖
6.3 输出日志
使⽤ @Slf
4j 注解,在程序中使⽤ log 对象即可输⼊⽇志,并且只能使⽤ log 对象才能输出,这是 lombok 提供的对象名
@Controller //与前端进行交互的注解
@ResponseBody
@Slf4j // 利用注解得到日志对象,默认生成 log 对象,下面直接使用即可
public class UserService {
@RequestMapping("/sayhi") //设置路由
public void sayHi() {
log.trace("trace: 微量日志");
log.debug("debug:调试日志");
log.info("info: 普通日志");
log.warn("warn: 警告日志");
log.error("error: 错误日志");
}
}
6.4 lombok 原理解释
lombok 能够打印⽇志的密码就在 target ⽬录⾥⾯,target 为项⽬最终执⾏的代码,查看 target ⽬录如 下:

Java 程序的运行原理
Lombok 的作⽤如下图所示:
6.5 lombok 更多注解说明
1)基本注解
注解
|
作⽤
|
@Getter
|
⾃动添加 getter ⽅法
|
@Setter
|
⾃动添加 setter ⽅法
|
@ToString
|
⾃动添加 toString ⽅法
|
@EqualsAndHashCode
|
自动添加 equals 和 hashCode ⽅法
|
@NoArgsConstructor
|
⾃动添加⽆参构造⽅法
|
@AllArgsConstructor
|
⾃动添加全属性构造⽅法,顺序按照属性的定义顺序
|
@NonNull
|
属性不能为null |
@RequiredArgsConstructor
|
⾃动添加必需属性的构造⽅法,final + @NonNull 的属性为必需
|
2)组合注解
注解 | 作用 |
@Data |
@Getter + @Setter + @ToString +
@EqualsAndHashCode +
@RequiredArgsConstructor +
@NoArgsConstructor
|
3)日志注解
注解 | 作用 |
@Slf
4
j
|
添加⼀个名为 log 的⽇志,使⽤ slf
4
j
|
6.6 选择不同配置环境平台
平台一般都有三个:
运行平台(application)、开发平台(application-dev)、生产平台(application-prod)
//从配置文件中读取图片的保存路径
@Value("${img.path}")
private String imgpath;
@RequestMapping("/say") //路由
public String say() {
return "hello springmvc. " + imgpath;
}
7. 单元测试
单元测试(unit testing),是指对软件中的最⼩可测试单元进⾏检查和验证的过程就叫单元测试。
单元测试是开发者编写的⼀⼩段代码,⽤于检验被测代码的⼀个很小的、很明确的(代码)功能是否正确。执⾏单元测试就是为了证明某段代码的执⾏结果是否符合我们的预期。如果测试结果符合我们的预期,称之为测试通过,否则就是测试未通过(或者叫测试失败)。
单元测试的优点:
1)可以非常简单、直观、快速的测试某一功能是否正确。2)使用单元测试可以帮我们在打包的时候,发现一些问题;因为在打包之前,所用的单元测试必须正确,否则不能打包成功3)使用单元测试,在测试功能的时候,可以不污染连接的数据库,也就是可以不对数据库进行任何改变的情况下测试功能。
测试框架的添加
Spring Boot 项⽬创建时会默认单元测试框架 spring-boot-test,⽽这个单元测试框架主要是依靠另⼀ 个著名的测试框架 JUnit 实现的,打开 pom.xml 就可以看到,以下信息是 Spring Boot 项⽬创建是⾃动添加的:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
7.1 生成单元测试类
想在哪个类下测试,就在哪个类下进行下面的操作
7.2 添加单元测试代码
1.添加 框架测试注解@SpringBootTest
2. 添加单元测试业务逻辑
测试结果
因为需要测试类里面是打印日志的,所以上面测试成功
7.3 简单的断言说明
如果断⾔失败,则后⾯的代码都不会执⾏。