Spring Boot 日志的使用

简介: Spring Boot 日志的使用

一. 什么是 Spring Boot 日志



Spring Boot 日志是指在 Spring Boot 应用程序中记录日志信息和跟踪应用程序执行过程的机制和工具. Spring Boot 集成了常用的日志框架, 如 Log4j、logback、Java Util Logging, 并提供了简单易用的配置方式, 使开发者能够方便的应用程序能够方便的应对应用程序的运行状态进行监控和面试.


下面就来看一个最简单的日志, 也是大家都见过最常见的日志, 在项目启动的时候, 日志其实就已经打印了, 只是没有持久化罢了


93ffbb395d0d5c18633ee7f78d78a088.png


二. 日志的作用



从上面 Spring Boot 项目启动可以看到, 在启动的时候, 它打印了日志, 从日志里面我们可以看到一些信息, BUG 等级, 端口号等. 哪日志只有这些嘛 ? 当然不是了, 这里的简单的启动日志只记录了一些最基本的东西, 但日志还可以去干更多事


  • 记录登陆日志, 利于分析用户是否正常登陆, 防止其恶意攻击破解用户

如果我们记录了登陆日志, 那么就可以从用户的登陆次数, 每次登陆是输入的次数, 在何地登陆等等, 来分析用户是否异地风险登陆, 多次暴力破解等问题


  • 记录系统的操作日志, 方便数据恢复和定位操作

例如一个学校的教务系统, 记录每次系统的操作日志, 比如学生转班信息, 账户信息, 学籍管理等等. 当老师操作失误时, 比如将张三从 1 班 转到了 2 班, 这样就可以根据日志进行回滚操作进行数据的恢复, 同时可以定位到是哪个老师的错误操作出了问题进行追责等等


  • 记录系统执行时间, 方便优化程序做数据支撑

记录一个程序开始时间, 在结束时也记录一下时间, 从而可以获取到该程序的执行时间. 执行时间过长, 那么需要考虑去如何优化它.


当然, 除了上面列举的一些作用, 日志还有其他重要用途, 大家可以自行探索


三. 如何自定义日志



当我在 TestController 中建立一个路由方法时, 去访问后, 在控制台输出了 打印日志 : XXX , 这是日志信息嘛 ?

102d06f5bdff8aa4110d7df812ed8a7e.png


相信肯定会认为, 在控制台输出了那就对了, 如果这个方法没输出那就错了. 光从这个层面上看, 好像确实是可以基础的定位到方法上, 但是从下面这些角度去看的时候就不这么认为了.


  1. 没有位置信息

该方法执行在那个位置不知道, 当我们在多出调用这个方法以后, 只通过控制台来简单的 sout 是很难定位到那个地方调用的这个方法出错了


  1. 没有时间信息

这是一个黑盒的模式, 没有时间, 不知道他是在执行前错误了还是执行和错误了

那么, 肯定还会有人认为, 我可以在每个方法下都输出不同的错误信息, 并且加上时间 sout 同样可以解决这个问题, 除了麻烦一点. 但是, 除了这两个问题, sout 还存在另外两个问题


  1. 没有级别设置

在生产中, 当出现错误以后, 更多的是想更直观的看到错误信息, 而不是调试错误信息, 没有办法设置日志级别进行信息的筛选,


  1. 不能持久化

这是最重要的问题, 当项目进行生产以后, 日志信息是很重要的信息, 它可以作为问题的分析基础, 是需要进行持久化的, 而 sout 是没有办法解决的, 重启以后就无法观察日志了


三. 如何使用日志



对于 Spring Boot 中, 它内置了 SLF4J 框架, 可以直接在程序中进行调用 SLF4J 来打印日志, 并且日志一个门面模式, 何为门面模式呢 ?


在这举例来说就像找房子一样, SLF4J 在这就充当了这个房屋中介的作用, 而它手下不同房子就是它的实现. 例如大平层( Log4j ) 、小洋房( logback ) 、海景别墅( Java Util Logging ). 某一天你需要租一个房子来装你得东西, 你就去找房屋中介, 房屋中介就会给你介绍上面的几种房屋类型, 你可以自己进行选择. 比如你选择了大平层, 你住腻了可以换一个通过中介在海景别墅, 这样你就可以省去找房子的时间, 想更换只需要通过中介进行更换就可以了


带入到我们的日志中, 中介就是日志的门面, 中介控制的房子就是日志的实现, 这样有什么好处呢 ? 我们不再需要去关注门面, 托管给别人帮我们做了, 只需要去看喜欢那个房子( 用什么日志方式去输出就行 ) 有一天住腻了 ( 这个日志方式出了问题 ) 就可以快速的通过中介在换一个房子( 换一个日志方式 ) , 避免在没有地方可以去( 你所有的日志都用的这个方法去控制, 没有中介那你想要换个房子就需要很长时间去修改 )


了解了日志得门面模式以后, 接下来看看如何自定义实现也给日志


  1. 得到日志对象
  • 注意级别

通过上面得启动得系统日志可以看到, 他都是一类得, 因此获取的日志对象一定是类级别的日志对象, 并非只在某个具体的方法里去实现的方法级别对象

0cf5cfdfb05d0ddb1d8fb312ae92c36c.png


  • 注意作用域

通过启动的系统日志可以看到, 日志的打印都是带有位置信息的, 你在哪个包那个类底下都是清楚的, 因此日志对象只能是私有的即只能在我这个类本身内去使用, 在别的类底下不好使, 否则日志就会乱了位置

0d88a99cad9ff180b19e5f00456034a8.png


  • 注意框架的选择

由于我们在使用 SLF4J 作为门面模式时, 去创建日志对象需要通过门面去调用具体的实现方式, 因此创建日志对象时应当选择 SLF4J 下的 Logger

cfc81b29cadad74d2aa3a9d3d9e37bbe.png


综上, 最终通过 SLF4J 的 Logger 创建一个 log 对象, 并通过提供的日志工程去调用 getLogger ( 因为是类级别的, 因此此处选择的 getLogger 方法 )成功创建一个日志对象

98a517e72ff61c50028b399292496992.png

e4063285ee2839163052886c51022773.png


  1. 使用 log 对象

image.png


访问路由后在控制台可以看到如下信息 :


PS : 日志信息打印此处和你们默认的不一样, 我在配置文件中设置了默认等级为 debug, 日志系统默认等级为 info, 下面会说这个问题, 此处只关注日志对象输出日志有哪些内容即可

f633f5f7eb65368514d7f8aa4c1d8efa.png


时间信息、日志等级信息、日志位置信息、日志内容信息. 可以说是非常的齐全日志


四. 日志级别



  1. trace : 微量级别, 级别最低
  2. debug : 需要调试的时候使用, 调试级别
  3. info : 普通的打印信息 ( 日志默认的级别 )
  4. warn : 警告, 不影响使用, 但是需要注意的问题
  5. error : 错误信息, 级别比较高的错误日志信息
  6. fatal : 致命的, 因代码异常导致程序执行退出的事件


上面就是日志的级别, 但是我们能够操作的日志级别只有前五个, 最后一个致命的日志级别是无法操控的, 当程序错误退出的时候, 系统会自动帮我们打印 fatal 级别的日志信息.

从上之下, 级别是越来越高的, 越往下接收的消息越少, 遵守一个原则低级别的无法查看高级别的

b3abb9f2cdfbc394aec8a66c0edc05b6.pngdf8a021ac9f47731fd49d91ac7a1727c.png


可以看到, 只能查看到 info、warn 和 error 级别的错误信息, 而 trace 和 debug 是无法查看的, 这是为什么呢 ?

当我们把 info 注销掉在看看

0724acdfad64ead5137bc6828dcd9fa3.png


可以看到, 只有 info 不见了, 在把 warn 和 error 注释掉看看

03c9e9e760b6a3118dd23a0130acca57.png


此时没有任何日志信息, 可以得到结论 日志的默认等级是 info, 哪当我们想查看 trace 和 debug 的日志信息怎么办呢 ? 毕竟调试日志对于写程序来说是很重要的, 可以定位问题所在, 下面就介绍一下 Spring Boot 中项目中日志的等级设置


五. 日志等级的设置



下面在 properties 配置文件中配置日志等级

192e90a9016a4ae72be6d46d51db305f.png


或者在 yml 中设置日志等级

445c3b0611189d88a68ac57028b3bb61.png


设置好以后, 在来执行观察看之前的 log 方法

6c392c4cf6c0a4d0a2963e2c032e9862.png


由于我们已经在配置文件中设置了默认等级为 debug, 因此 debug 等级的错误日志信息我们也就可以看到了. 而比 debug 等级还低的 trace 日志信息仍然是无法查看的, 想要看就可以将配置信息中日志的等级设置为 trace


另外, 配置文件中除了 root( 根记录器 ) 设置为日志等级外, 还有更加详细的日志等级设置, 为特定的包设置日志等级, 例如下面这个配置文件中, 设置 com.example 包下的类日志等级为 info, 而 com.example.demo 包下的日志等级为 debug

1dc2cce085ae4f9c32bbf234138dfd92.png


六. 日志的持久化



当然, 日志如此重要不仅仅是因为它可以定位问题, 更重要的时候它可以作为数据分析, 想要数据分析肯定不能通过控制台 sout 的方式打印日志, 下次启动就没有了, 因此就必须将日志进行持久化, 下面就来实现日志的持久化操作


在 yml 配置文件中设置. 设置文件路径, 文件的名称可以不写( 写了生成的就是你设置的名称 ), 会自动生成一个名为 spring.log 的文件

1b7906b9cc8bc0ea3bf56a0a5c864fe7.png


再去运行刚刚的 log 方法, 此时在我刚刚的保存路径底下就生成了这样一个 spring.log 文件

151343e96ab52fc4f73b20529559b377.png

当我重复去访问这个方法时, 它会重复打印日志, 我们来看看会不会覆盖

ca68f6e648cf966a4139ba1b78cf82ae.png


事实上, 它是不会覆盖的, 如果真的覆盖了那才是出大问题了 !


PS 1 : 在文件的保存路径设置中, 如果没有设置路径, 它会在项目底下生成一个你设置的名称的文件

8f6c473390acdbd2b4592d1ef94388d5.png


PS 2 : 在官网中可以看到说明, 当日志文件超过 10MB 大小时, 它会将你后续得日志文件保存在一个新的文件中( 并且它会按照自己的命名规则替你命名和分割日志 ), 但是这个日志文件的大小也是可以去设置的


七. lombok 实现日志



可以看到, 在不同的类下去实现日志打印时, 都需要去创建日志对象, 修改 getLogger 方法的类对象, 会有点麻烦, 因此 lombok 就给我们提供了更简单的方式来实现日志的打印


  1. 添加 lombok 依赖
    这一步都会, 手动添加即可
  2. 添加 @slf4j 注解

94cb762c00bdf086249cf71597b6d08f.png


lombok 除了 @slf4j 注解外, 还有很多其它注解, 大家可以去官网查看.

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
3月前
|
Prometheus 监控 Java
日志收集和Spring 微服务监控的最佳实践
在微服务架构中,日志记录与监控对系统稳定性、问题排查和性能优化至关重要。本文介绍了在 Spring 微服务中实现高效日志记录与监控的最佳实践,涵盖日志级别选择、结构化日志、集中记录、服务ID跟踪、上下文信息添加、日志轮转,以及使用 Spring Boot Actuator、Micrometer、Prometheus、Grafana、ELK 堆栈等工具进行监控与可视化。通过这些方法,可提升系统的可观测性与运维效率。
385 1
日志收集和Spring 微服务监控的最佳实践
|
3月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
628 5
|
9月前
|
存储 Java 文件存储
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— logback.xml 配置文件解析
本文解析了 `logback.xml` 配置文件的详细内容,包括日志输出格式、存储路径、控制台输出及日志级别等关键配置。通过定义 `LOG_PATTERN` 和 `FILE_PATH`,设置日志格式与存储路径;利用 `<appender>` 节点配置控制台和文件输出,支持日志滚动策略(如文件大小限制和保存时长);最后通过 `<logger>` 和 `<root>` 定义日志级别与输出方式。此配置适用于精细化管理日志输出,满足不同场景需求。
2192 1
|
9月前
|
Java 微服务 Spring
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录——使用Logger在项目中打印日志
本文介绍了如何在项目中使用Logger打印日志。通过SLF4J和Logback,可设置不同日志级别(如DEBUG、INFO、WARN、ERROR)并支持占位符输出动态信息。示例代码展示了日志在控制器中的应用,说明了日志配置对问题排查的重要性。附课程源码下载链接供实践参考。
1064 0
|
9月前
|
SQL Java 数据库连接
微服务——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 格式,因其层次清晰,但需注意格式要求。
867 0
|
5月前
|
机器学习/深度学习 XML Java
【spring boot logback】日志logback格式解析
在 Spring Boot 中,Logback 是默认的日志框架,它支持灵活的日志格式配置。通过配置 logback.xml 文件,可以定义日志的输出格式、日志级别、日志文件路径等。
926 5
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
3808 31
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
7月前
|
监控 容灾 算法
阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化
本文探讨了如何高效、经济且可靠地将海外应用与基础设施日志统一采集至阿里云日志服务(SLS),解决全球化业务扩展中的关键挑战。重点介绍了高性能日志采集Agent(iLogtail/LoongCollector)在海外场景的应用,推荐使用LoongCollector以获得更优的稳定性和网络容错能力。同时分析了多种网络接入方案,包括公网直连、全球加速优化、阿里云内网及专线/CEN/VPN接入等,并提供了成本优化策略和多目标发送配置指导,帮助企业构建稳定、低成本、高可用的全球日志系统。
834 54
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
370 9

热门文章

最新文章