SpringBoot的日志

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: SpringBoot的日志

🔎日志是什么


日志

记录软件运行状态, 事件和错误信息的一种机制

如图即为 Spring Boot 的日志

🔎日志的作用


  • 记录软件的运行状态, 错误信息, 警告信息
    (目的是为了在出现问题时能够快速定位和解决问题)
  • 分析软件的性能, 用户的行为
    (目的是为了优化软件产品)
  • 监控软件的运行情况
    (目的是为了保证软件的稳定性)

🔎日志级别


日志级别的作用


  1. 快速筛选出重要的日志
  2. 根据环境的不同设置不同的日志级别

举个栗子🌰

当前环境是开发环境, 通常设置的日志级别为 debug

当前环境是生产环境, 通常设置的日志级别为 warn / error

日志级别的分类


  • trace → 微量, 少许(级别最低)
  • debug → 调试
  • info → 普通的打印信息(默认日志级别)
  • warn → 警告⚠(出现警告不影响使用, 但需要注意警告的问题)
  • error → 错误
  • fatal → 致命的(不能自定义设置, 代码异常导致程序退出)

日志级别的设置


日志级别的设置通常在对应的环境中进行设置, 而不是直接在配置文件中设置

logging:
  level:
    root: error # root -> 设置全部的日志级别
    对应的包名:
      对印的类名: 设置对应类的日志级别

🔎打印日志


打印日志


打印日志分为 2 个步骤

  1. 得到日志
  2. 使用日志打印相关内容

得到日志🍂

private static final Logger log = LoggerFactory.getLogger(UserController.class);

对于getLogger(), 括号中的内容为日志的归属类

即打印的日志信息是关于哪个类的信息

使用日志打印相关内容🍂

log.trace("this is trace");
log.debug("this is debug");
log.info("this is info");
log.warn("this is warn");
log.error("this is error");

运行查看结果

结果分析🍂

想要显示的日志内容为 5 个, 分别是

  1. this is trace
  2. this is debug
  3. this is info
  4. this is warn
  5. this is error

运行结果却只显示其中 3 个

这是因为日志级别的缘故

默认的日志级别是 info

日志级别 ≥ 默认级别时才会被打印

具体内容划分


日志的内容可划分为 6 个部分

  • 日志的打印时间
  • 日志的级别
  • 线程Id
  • 线程名称
  • 日志归属的包名 + 类名
  • 日志的内容

🔎常用的日志框架


  • Spring Boot 内置的日志框架
  • SLF4J
  • logback

举个栗子🌰

将 Spring Boot 框架看作是餐厅

日志门面看作是餐厅的服务员

日志实现看作是餐厅的厨师

而我们则是来餐厅吃饭的顾客

顾客来到餐厅 → 喊服务员点餐 → 服务员将菜单送给厨师 → 厨师根据菜单做菜

在这个过程中顾客并不关心菜是如何制作的, 只要保证能将菜做好即可

Spring Boot 框架也是如此

程序员(顾客)来到餐厅 → 喊服务员(日志门面)点餐 → 服务员(日志门面)将菜单送给厨师(日志实现) → 厨师(日志实现)根据菜单做菜

为什么这样设计


根据上面的描述提出一个疑问

为什么这样设计?

解耦合

上述流程是这样的

程序员调用日志门面, 日志门面调用日志实现

(程序员 → 日志门面 → 日志实现)

但如果程序员直接调用日志实现

(程序员 → 日志实现)

则会面临如下情况

程序员编写对应的 logback 代码

有一天 logback 这个对应的接口出现了严重的 BUG

无奈之下, 只能更换为其他接口

由于之前一直使用 logback 这个接口, 因此需要修改的业务量比较庞大

(即使全部修改, 也会面临其他接口他日出现重复的问题)

这就导致了高耦合

对比System.out.println()与日志框架


  1. System.out.println() 能够打印信息, 但与日志框架相比, 缺少打印的时间, 信息的来源, 信息归属的包名 + 类名…
  2. System.out.println() 只能将信息打印, 无法隐藏(日志框架可以通过设置日志的级别进行相关日志的隐藏 / 显示)

🔎日志的持久化


日志的持久化

将日志中的内容保存至指定位置的过程

name, 保存日志的名称(可省略, 省略则使用默认提供的名称spring.log)

path, 保存日志的路径(可省略, 省略则使用默认提供的路径)

logging:
  file:
    name: 
    path: 

保存的指定路径 + 默认名称

注意🍂

保存的路径不存在时, 系统会自动创建

保存的默认路径 + 指定名称

注意🍂

日志的存储方式是追加而非覆盖

存储日志的最大容量默认为 10MB

超过该容量会自动创建一个新的文件进行存储

追加, 即在原日志文件的基础上继续存储新的日志内容(但超过 10MB 后会自动创建一个新的日志文件承接原日志文件)

覆盖, 即新的日志内容将原日志文件进行更替

🔎Lombok—更简单的打印日志


对比得到日志的方式


一般得到日志的方式🍭

private static final Logger log = LoggerFactory.getLogger(ArticleController.class);

Lombok 得到日志的方式🍭

@Slf4j

创建SpringBoot项目时忘记添加Lombok怎么办

  1. 引入插件
  2. 在 pom.xml 文件中进行添加

引入 EditStarters 插件

在 pom.xml 文件中单击右键 → Generate → Edit Starters → OK → 添加 Lombok

🔎结尾

创作不易,如果对您有帮助,希望您能点个免费的赞👍

大家有什么不太理解的,可以私信或者评论区留言,一起加油

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
打赏
0
0
0
0
1
分享
相关文章
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— logback.xml 配置文件解析
本文解析了 `logback.xml` 配置文件的详细内容,包括日志输出格式、存储路径、控制台输出及日志级别等关键配置。通过定义 `LOG_PATTERN` 和 `FILE_PATH`,设置日志格式与存储路径;利用 `<appender>` 节点配置控制台和文件输出,支持日志滚动策略(如文件大小限制和保存时长);最后通过 `<logger>` 和 `<root>` 定义日志级别与输出方式。此配置适用于精细化管理日志输出,满足不同场景需求。
350 1
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录——使用Logger在项目中打印日志
本文介绍了如何在项目中使用Logger打印日志。通过SLF4J和Logback,可设置不同日志级别(如DEBUG、INFO、WARN、ERROR)并支持占位符输出动态信息。示例代码展示了日志在控制器中的应用,说明了日志配置对问题排查的重要性。附课程源码下载链接供实践参考。
188 0
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— application.yml 中对日志的配置
在 Spring Boot 项目中,`application.yml` 文件用于配置日志。通过 `logging.config` 指定日志配置文件(如 `logback.xml`),实现日志详细设置。`logging.level` 可定义包的日志输出级别,例如将 `com.itcodai.course03.dao` 包设为 `trace` 级别,便于开发时查看 SQL 操作。日志级别从高到低为 ERROR、WARN、INFO、DEBUG,生产环境建议调整为较高级别以减少日志量。本课程采用 yml 格式,因其层次清晰,但需注意格式要求。
243 0
|
4月前
|
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录——slf4j 介绍
在软件开发中,`System.out.println()`常被用于打印信息,但大量使用会增加资源消耗。实际项目推荐使用slf4j结合logback输出日志,效率更高。Slf4j(Simple Logging Facade for Java)是一个日志门面,允许开发者通过统一方式记录日志,无需关心具体日志系统。它支持灵活切换日志实现(如log4j或logback),且具备简洁占位符和日志级别判断等优势。阿里巴巴《Java开发手册》强制要求使用slf4j,以保证日志处理方式的统一性和维护性。使用时只需通过`LoggerFactory`创建日志实例即可。
111 0
SpringBoot入门(6)- 添加Logback日志
SpringBoot入门(6)- 添加Logback日志
209 5
Spring Boot中的日志框架选择
在Spring Boot开发中,日志管理至关重要。常见的日志框架有Logback、Log4j2、Java Util Logging和Slf4j。选择合适的日志框架需考虑性能、灵活性、社区支持及集成配置。本文以Logback为例,演示了如何记录不同级别的日志消息,并强调合理配置日志框架对提升系统可靠性和开发效率的重要性。
118 5
Spring Boot 3 集成Spring AOP实现系统日志记录
本文介绍了如何在Spring Boot 3中集成Spring AOP实现系统日志记录功能。通过定义`SysLog`注解和配置相应的AOP切面,可以在方法执行前后自动记录日志信息,包括操作的开始时间、结束时间、请求参数、返回结果、异常信息等,并将这些信息保存到数据库中。此外,还使用了`ThreadLocal`变量来存储每个线程独立的日志数据,确保线程安全。文中还展示了项目实战中的部分代码片段,以及基于Spring Boot 3 + Vue 3构建的快速开发框架的简介与内置功能列表。此框架结合了当前主流技术栈,提供了用户管理、权限控制、接口文档自动生成等多项实用特性。
315 8
SpringBoot入门(6)- 添加Logback日志
SpringBoot入门(6)- 添加Logback日志
131 1
SpringBoot项目使用AOP及自定义注解保存操作日志
SpringBoot项目使用AOP及自定义注解保存操作日志
134 1
SpringBoot框架日志详解
本文详细介绍了日志系统的重要性及其在不同环境下的配置方法。日志用于记录系统运行时的问题,确保服务的可靠性。文章解释了各种日志级别(如 info、warn、error 等)的作用,并介绍了常用的日志框架如 SLF4J 和 Logback。此外,还说明了如何在 SpringBoot 中配置日志输出路径及日志级别,包括控制台输出与文件输出的具体设置方法。通过这些配置,开发者能够更好地管理和调试应用程序。
180 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问