文章目录
- 前言
- 日志怎么用
- 分析日志
- 自定义打印日志
- 常用日志配置操作
- ⽇志级别 - 了解
- 为什么SpringBoot可以打印日志, 并设置日志级别
- 给当前项目设置日志级别, 给单个文件夹单独设置级别
- ⽇志持久化-以下方式都可以存储
- Lombok的前置工作
- Lombok提供的方法
- Lombok的实现原理
前言
上文讲述了 SpringBoot项目的构建 与配置文件的使用 ,下面来介绍 SpringBoot 的日志文件 , 日志在程序 中起到的作用是很大的 , 谁写的程序能不报错误呢, 日志就是一种让你快速找到错误的方式! , 当然日志也不止是寻找错误 ,还有很多的用法 , 比如登录日志 ,记录谁来登录等等, 但对于我们程序员来说 , 最重要的就是定位错误
日志怎么用
Spring Boot 项⽬在启动的时候默认就有⽇志输出,如下图所示:
这些日志是默认的 , SpringBoot 内置了日志框架 , 一般我们是自定义日志来打印的, 而且日志是默认打印在控制台上的, 是不能保存的 , 所以 我们还要学习如何把日志永久保存下来
分析日志
最后面的是: 日志内容
使用System.out,println打印日志
1: 无时间(可以自己加)
2: 没有日志级别
3:无打印日志的执行位置(可以加)
4:无法持久化日志(最严重)
自定义打印日志
① : 在程序中得到⽇志对象 , 要在程序中获取到日志, 就需要一个类 ,LoggerFactory ,如下代码所示
private static Logger logger = LoggerFactory.getLogger(LogController.class);
这里说一下: getLogger里面的是要打印的类对象 , 不能乱写, 是给输出日志,和保存日志提供找到的路径
package com.example.demo.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
public class LogController {
private static Logger logger = LoggerFactory.getLogger(LogController.class);
@RequestMapping("/log")
public void log(){
// 使用logger打印对象
logger.info("这是测试打印日志的一条语句");
}
}
⽇志⼯⼚需要将每个类的类型传递进去,这样我们才知道⽇志的归属类,才能更⽅便、更直观的定位到问题类, Logger 对象是属于 org.slf4j 包下的,不要导⼊错包
Spring Boot 中内置了⽇志框架 Slf4j,所以咱们可以直接在程序中调⽤ slf4j 来输出⽇志
打印日志 - 打印效果
logger.info("--------------要输出⽇志的内容----------------");
常用日志配置操作
配置日志的文件名称
logging:
file:
name: D:\\home\\ruoyi\\spring-1204.log
配置日志的保存路径
# 设置⽇志⽂件的⽬录
logging:
file:
path: D:\\home\\ruoyi
配置日志的级别
logging:
level:
root: error
配置不同包下面的级别 ,
logging.level.com.example.demo.test=trace
⽇志级别 - 了解
trace:微量,少许的意思,级别最低;
debug:需要调试时候的关键信息打印;
info:普通的打印信息(默认⽇志级别);
warn:警告,不影响使⽤,但需要注意的问题;
error:错误信息,级别较⾼的错误⽇志信息;
fatal:致命的,因为代码异常导致程序退出执⾏的事件。
⽇志级别配置只需要在配置⽂件中设置“logging.level”配置项即可,如下所示:
logging:
level:
root: error
为什么SpringBoot可以打印日志, 并设置日志级别
因为SpringBoot内置了俩个日志框架 ,SLF4J+LogBack
其中SLF4J让开发者使用和调用的框架
LogBack是最底层实现日志相关操作的框架
注: SpringBoot默认的日志级别是Info
给当前项目设置日志级别, 给单个文件夹单独设置级别
⽇志持久化-以下方式都可以存储
以上的⽇志都是输出在控制台上的 , 在想要永久保存日志的情况下 , 就需要在配置⽂件中指定⽇志的存储⽬录或者是指定⽇志保存⽂件名之后,Spring Boot 就会将控制台的⽇志写到相应的⽬录或⽂件下了。
日志文件由默认的大小设置, 如果超过会重启一个文件
日志是以追加的方式添加的
# 设置⽇志⽂件的⽬录
logging.file.path= D:\\home\\ruoyi
输出结果如下图
# 设置⽇志⽂件的⽬录
logging:
file:
path: D:\\home\\ruoyi
# 设置⽇志⽂件的⽂件名
logging:
file:
name: D:\\home\\ruoyi\\spring-1204.log
当然 有更简单的方式 , 使用神器 L:ombok来解决这个日志问题
Lombok的前置工作
① 无论什么版本的IDEA都必须安装插件
②,添加Lombok依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
然后在类上 加上@Slf4j注解, 最后打印用log对象输出日志即可
使用了@Slf4j就相当于private static Logger logger =LoggerFactory.getLogger(LogController.class);这一句话
Lombok提供的方法
@Getter ⾃动添加 getter ⽅法
@Setter ⾃动添加 setter ⽅法
@ToString ⾃动添加 toString ⽅法
@EqualsAndHashCode ⾃动添加 equals 和 hashCode ⽅法
@NoArgsConstructor ⾃动添加⽆参构造⽅法
@AllArgsConstructor ⾃动添加全属性构造⽅法,顺序按照属性的定义顺序
@NonNull 属性不能为 null
@RequiredArgsConstructor ⾃动添加必需属性的构造⽅法,final + @NonNull 的
属性为必需
而@ Data 注解则提供了 上述大多数的方法 , 除了@NoArgsConstructor ⾃动添加⽆参构造⽅法
@AllArgsConstructor ⾃动添加全属性构造⽅法,顺序按照属性的定义顺序
@NonNull 属性不能为 null 这三个.剩下都有
Lombok的实现原理
Lombok是在编译期间,来转换代码的 , 不会影响运行期间的效率
相当于在编译期间, Lombok给你生成了对应的方法