0
点赞
收藏
分享

微信扫一扫

详解 Spring Boot 项目中的日志文件

秦瑟读书 2022-12-05 阅读 103

目录

1. 日志的作用

2. 自定义日志打印

2.1 日志的基本格式

2.2 得到日志对象

2.3 使用日志对象提供的方法, 打印自定义的日志内容

2.4 日志框架的说明

3. 日志的持久化 

3.1 配置日志文件的文件名

3.2 配置日志文件的保存路径

 3.3 持久化日志的特性

4. 日志的级别

4.1 日志级别的作用

4.2 日志级别的分类

4.3 设置日志级别

5.更加简单的打印日志

5.1  添加 lombok 依赖

5.2 使用 @SLF4J 注解实现更简单的打印日志

5.3 lombok 原理分析


1. 日志的作用

日志最基本的作用就是发现和定位问题, 我们平时在写程序的时候, 没有达到预期效果时, 我们都会打开控制台去查看错误原因, 这就是最基本的体现.

当然日志还有其他的作用:

2. 自定义日志打印

2.1 日志的基本格式

自定义日志打印的基本步骤:

  1. 得到日志对象
  2. 使用日志对象提供的方法, 打印自定义的日志内容

【代码示例】

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 来做到更加简单的实现.

【具体步骤】

  1. 添加 lombok 依赖
  2. 使用 @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 只是帮我们做了这些复杂的事情.

运行原理图: 


本篇文章就到这里了, 谢谢观看!!

举报

相关推荐

0 条评论