SpringBoot的日志

目录

一.日志的作用

二.日志如何使用

2.1自定义日志

2.2日志格式

三.日志级别

3.1级别的分类和使用

3.2日志持久化

四.使用lombok进行日志输出


一.日志的作用

日志有什么用?

如果你的项目不是很大,你会发现其实没什么重要的,但是如果你的项目很复杂,没有日志,你会感觉自闭的
⽇志是程序的重要组成部分,想象⼀下,如果程序报错了,不让你打开控制台看⽇志,那么你能找到报错的原因吗?不可能,完全不可能的啊!
日志常见的作用:

  • 发现问题、定位问题
  • 可记录用户的登记日志
  • 记录系统的操作时间
  • 记录程序的执行时间

二.日志如何使用

在正常SpringBoot运行之后,就会有默认的日志输出!

因此我们可以发现,3个问题:

  1. SpringBoot内置了日志框架。
  2. 默认情况下,日志并非是开发者定义和打印。
  3. 日志默认是打印在控制台上,而控制台的日志是不能保存的,那怎么保存呢?

2.1自定义日志

日志,获取日志对象,通过相关语法打印日志!

日志工厂:LoggerFactory 该类,是将每个类的类型传递进去,才能知道日志的归属类!

一般认为一个类中有一个日志对象即可,所以我们在定义日志对象时可以将其定义为静态的私有属性

java 复制代码
// 1.得到⽇志对象
private static Logger logger = LoggerFactory.getLogger(UserController.class
);

SLF4J(Simple Logging Facade for Java)框架。SLF4J 是一个为各种日志记录器提供统一抽象的框架,它本身并不提供日志记录功能,而是通过与不同的日志记录器实现(如 Logback、Log4j2)进行绑定来实现日志记录功能。 但是springBoot里内置此框架。

但是由于Logger对象是属于org.slf4j包下的,因此我们需要导包。

打印自定义日志:

要打印日志消息,可以使用日志记录器的不同级别的方法,例如:

  1. 跟踪级别(Trace) :记录最详细的日志信息,通常用于调试。可以使用 logger.trace("message") 方法来记录跟踪级别的日志。

  2. 调试级别(Debug) :记录调试信息,通常用于诊断问题。可以使用 logger.debug("message") 方法来记录调试级别的日志。

  3. 信息级别(Info) :记录一般信息,通常用于显示程序的运行状态。可以使用 logger.info("message") 方法来记录信息级别的日志。

  4. 警告级别(Warn) :记录警告信息,表示潜在的问题,但不会影响程序的正常运行。可以使用 logger.warn("message") 方法来记录警告级别的日志。

  5. 错误级别(Error) :记录错误信息,表示程序出现了错误,但不会导致程序崩溃。可以使用 logger.error("message") 方法来记录错误级别的日志。

  6. 严重错误级别(Fatal):记录严重错误信息,表示程序出现了严重问题,可能导致程序崩溃。不是所有的日志记录器都支持这个级别。

我们先使用Info信息级别的展示一下:

2.2日志格式

日志一共包含了6个消息:

  • 打印时间
  • 打印级别
  • 线程名称
  • 线程ID
  • 执行类名
  • 日志消息

三.日志级别

日志级别有什么用呢?

  • 通过在应用程序中使用不同级别的日志记录,开发人员可以更好地了解应用程序的运行情况,快速诊断问题,并及时采取适当的措施来解决。在生产环境中,合理设置日志级别可以降低日志记录的数量,提高系统性能,并帮助管理员快速定位和解决问题。

3.1级别的分类和使用

日志级别分类:

  • trace:微量,少许的意思,级别最低;
  • debug:需要调试时候的关键信息打印;
  • info:普通的打印信息(默认⽇志级别);
  • warn:警告,不影响使⽤,但需要注意的问题;
  • error:错误信息,级别较⾼的错误⽇志信息;
  • fatal:致命的,因为代码异常导致程序退出执⾏的事件

等级从上往下,如果设置了warn级别,则无法收到info以上的信息了。

在SpringBoot里日志级别设置方法:

java 复制代码
logging:
 level:
  root: error

设置之后,你会发现启动项目之后,无论是默认的日志输出还是,日志记录器的日志,不会再有error以下的级别了!

3.2日志持久化

在开发项目时,我们的日志不应该一直显示在控制台吧,应该将日志保存下来,而需要持久化,两种方式:

  1. 我们需要在配置文件中指定日志的存储目录,
  2. 指定日志保存文件名

如此SpringBoot会将日志写入到相应的目录或者文件!

1.配置文件:

java 复制代码
# 设置⽇志⽂件的⽬录
logging:
  file:
    path: D:\\baidu\\home

启动项目之后,会自动生成一个名为Spring.log文件

2.配置日志文件的文件名:

java 复制代码
#日志文件文件名的设置
logging:
  file:
    name: D:\\baidu\\home\\springboot.log

该方法也可以自动生成所定义的日志输出文件!

四.使用lombok进行日志输出

如果想要获取日志,我们需要使用LoggerFactory类的getLogger(xxx.class)方法,很麻烦,所以为了便利,我们可以采取lombok进行简单输出。

需要的依赖和注解:

  1. 添加 lombok 框架支持
  2. 使用@slf4j注解输出日志

第一步:添加lombok依赖

在SpringBook项目里添加lombok依赖,如果存在则省略这步!

java 复制代码
<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
</dependency>

第二步 输出日志:

java 复制代码
@RestController //RestController = Controller + ResponseBody
@Slf4j //给当前类中添加一个叫做 log 的日志对象
public class LogController {
 
    @RequestMapping("/log/sayHi")
    public String sayHi() {
        log.info("aaaa");
        log.error("bbbb");
        return "log sayHi";
    }
}

相当于使用@Slf4j 代替 LoggerFactory.getLogger 在该类中添加了一个log对象。

额外补充:如果添加了Lombok依赖,我们可以使用@Data注解,在类上使用,该类的所有元素就都有了get和set方法

这个@Data很牛逼的,相当于很多注解之和!

@Data 注解相当于以下几个注解的组合:

  1. @ToString: 自动生成 toString() 方法,用于打印对象的字符串表示形式。
  2. @EqualsAndHashCode: 自动生成 equals()hashCode() 方法,用于对象的比较和哈希计算。
  3. @Getter: 自动生成所有字段的 getter 方法。
  4. @Setter: 自动生成所有字段的 setter 方法。
  5. @RequiredArgsConstructor: 生成一个包含所有必需字段的构造函数。
相关推荐
阿伟*rui1 小时前
配置管理,雪崩问题分析,sentinel的使用
java·spring boot·sentinel
XiaoLeisj3 小时前
【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题
java·开发语言·java-ee
paopaokaka_luck3 小时前
【360】基于springboot的志愿服务管理系统
java·spring boot·后端·spring·毕业设计
dayouziei3 小时前
java的类加载机制的学习
java·学习
码农小旋风4 小时前
详解K8S--声明式API
后端
Peter_chq4 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
Yaml45 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
小小小妮子~5 小时前
Spring Boot详解:从入门到精通
java·spring boot·后端
hong1616885 小时前
Spring Boot中实现多数据源连接和切换的方案
java·spring boot·后端
aloha_7895 小时前
从零记录搭建一个干净的mybatis环境
java·笔记·spring·spring cloud·maven·mybatis·springboot