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: 生成一个包含所有必需字段的构造函数。
相关推荐
Asthenia04122 分钟前
理解词法分析与LEX:编译器的守门人
后端
uhakadotcom3 分钟前
视频直播与视频点播:基础知识与应用场景
后端·面试·架构
Asthenia04121 小时前
Spring扩展点与工具类获取容器Bean-基于ApplicationContextAware实现非IOC容器中调用IOC的Bean
后端
bobz9651 小时前
ovs patch port 对比 veth pair
后端
Asthenia04121 小时前
Java受检异常与非受检异常分析
后端
uhakadotcom2 小时前
快速开始使用 n8n
后端·面试·github
JavaGuide2 小时前
公司来的新人用字符串存储日期,被组长怒怼了...
后端·mysql
bobz9652 小时前
qemu 网络使用基础
后端
Asthenia04122 小时前
面试攻略:如何应对 Spring 启动流程的层层追问
后端
Asthenia04123 小时前
Spring 启动流程:比喻表达
后端