目录
1. 日志的作用
日志最基本的作用就是发现和定位问题, 我们平时在写程序的时候, 没有达到预期效果时, 我们都会打开控制台去查看错误原因, 这就是最基本的体现.
当然日志还有其他的作用:
2. 自定义日志打印
2.1 日志的基本格式
自定义日志打印的基本步骤:
- 得到日志对象
- 使用日志对象提供的方法, 打印自定义的日志内容
【代码示例】
2.2 得到日志对象
private static Logger log = LoggerFactory.getLogger(TestController.class);
2.3 使用日志对象提供的方法, 打印自定义的日志内容
当然, 我们使用 System.out.println() 也能输出日志, 但是它不能代替日志, 因为这样打印日志存在问题:
2.4 日志框架的说明
3. 日志的持久化
为什么要将日志持久化?
日志的持久化有两种方式:
- 配置日志文件的文件名.
- 配置日志文件的保存路径.
3.1 配置日志文件的文件名
# 配置日志的保存名称
logging:
file:
name: mylog.log
启动程序, 访问 url, 我们的项目中就会多出一个 mylog.log 的文件, 如果你的项目中没有出现你命名的日志文件, 并且代码都是正确的情况下, 那可能就是 IDEA 缓存的问题, 你就可以打开你项目的文件夹, 找到底下的 target ,将其删除, 然后再运行一次程序, 访问 url 就能看见了.
打开 mylog 文件可以看到和在控制台看到一样的日志信息:
3.2 配置日志文件的保存路径
# 配置日志的保存路径
logging:
file:
path: D:\aa\
和上述操作一样, 最终会在指定路径下得到一个 spring.log 的文件.
3.3 持久化日志的特性
上述两种持久化日志的方式, 都会存在两种顾虑:
首先, 持久化日志的两种方式的特性都是有日志追加效果:
对于日志越来越大不方便查看的问题, 它也是有相应的应对策略的: 当日志比较大的时候, 会自动分割成多个文件 (默认是 20 MB, 可设置系统参数)
4. 日志的级别
4.1 日志级别的作用
4.2 日志级别的分类
日志有 6 个级别, 级别从低到高如下图所示:
这 6 个级别的设置, 越往下, 输出的日志就越少. 例如我们设置了 warn 级别, 那么我们就只能收到 warn, error, fatal 级别的日志了.
【代码示例】
@RestController
public class TestController {
private static Logger log = LoggerFactory.getLogger(TestController.class);
@RequestMapping("/log")
public String printLog() {
log.trace("i am trace.");
log.debug("i am debug.");
log.info("i am info.");
log.warn("i am warn.");
log.error("i am error.");
return "Hello Spring Boot~";
}
}
从执行结果来看, 当我们不设置日志级别的shihou,默认是 info, 于是控制台只打印了 warn, error 级别的日志. (fatal 级别的日志是不能通过方法打印出来的, 它没有这个方法, 只有在代码异常导致程序退出执行时才会有)
4.3 设置日志级别
基本格式:
logging:
level:
root: debug # 全局日志级别
此时云运行之前的代码:
设置成 debug 后, Spring 很多的系统日志就都打印出来了, 不方便查找我们所需要的日志, 这时候我们还可以更精细化的设置日志级别.
logging:
level:
root: warn # 设置系统日志级别
com:
example:
demo: debug # 具体到设置文件夹的日志级别
我们可以看到打印的日志信息少了很多, 只会打印我们所控制的日志级别范围内的日志信息了.
5.更加简单的打印日志
经过前面的讲解, 我们已经知道了打印日志需要两个步骤: 1. 得到日志对象; 2. 调用日志对象的方法, 打印日志.
>> 于是就会存在这样一件事情, 我们每个类中似乎都要去做第一步: 得到日志对象, 相对来说还是有点麻烦的, 那么我们可以使用 lombok 来做到更加简单的实现.
【具体步骤】
- 添加 lombok 依赖
- 使用 @SLF4J 注解替代第一步 - 得到日志对象.
5.1 添加 lombok 依赖
方式一:
- 下载 EditStarters 插件
- 在 pom.xml 中右键选择 Generate -> Edit Starters 然后进行选择 lombok 依赖.
方式二: (IDEA 2021 3.2+)
- 在 pom.xml 中右击选择 Generate -> Dependency, 然后输入 lombok 进行查找, 选择相关依赖.
5.2 使用 @SLF4J 注解实现更简单的打印日志
【代码示例】
@RestController
@Slf4j // @SLF4J 注解代替原始步骤的第一步
public class UserController {
@RequestMapping("/user")
public String hello() {
log.info("i am info."); // 内置的 log 对象
return "Hello Spring Boot~";
}
}
注意: 当我们使用 @SLF4J 注解时, 它会为我们提供一个 log 对象, 我们只能拿这个对象去调用打印日志的方法, 这是 lombok 的规定, 我们要遵守!!
>>> 为什么使用一个 @SLF4J 注解就能实现下面这条语句呢 ?
这就要去分析底层源码了>>>
5.3 lombok 原理分析
1. 打开项目文件夹所在路径, 找到以下路径下的 UserController.class 文件:
.\target\classes\com\example\demo
然后拖入到 IDEA 中观察代码:
可以发现生成的最终源码还是按照以前的方式来打印日志的, 所以 lombok 只是帮我们做了这些复杂的事情.
运行原理图:
本篇文章就到这里了, 谢谢观看!!