【框架篇】Spring Boot 日志

Spring Boot 日志


一,日志用途

尽管一个项目在没有日志记录的情况下可能能够正常运行,但是日志记录对于我们来说却是至关重要的,它存在以下功能:

1,故障排查和调试:当项目出现异常或者故障时,日志记录可以快速帮助我们定位到异常的部分以及知道异常的原因。

2,性能监测和优化:通过在关键代码路径中添加日志记录,可以了解应用程序的性能表现,并根据性能表现优化程序。

3,安全审计和监控:通过监视和分析系统日志,可以检测和识别潜在的安全威胁,如入侵、恶意行为或非法访问等非法行为。

4,数据统计和分析:通过对日志信息进行统计和分析,可以获取关于用户行为、系统使用情况和业务趋势等有价值信息并分析。


二,日志框架

日志框架常见的两个概念

日志门面(Logging Facade)和日志实现(Logging Implementation)是在日志框架中出现的两个概念。

日志门面是一个抽象层,它定义了一组统一的日志接口,用于在应用程序中记录日志。它的作用是将应用程序代码与具体的日志实现解耦,使得应用程序代码不直接依赖于某个具体的日志框架。通过使用日志门面,可以在运行时灵活地切换不同的日志实现,而无需修改应用程序的代码。

日志实现是指具体的日志框架的实现,它实现了日志门面所定义的接口,并提供了实际的日志记录功能。不同的日志实现提供了不同的配置选项、功能和性能特性。开发人员可以根据项目需求选择合适的日志实现,并使用相应的配置进行日志记录。

要使用日志门面,需要在应用程序中引入相应的日志门面库(SLF4JCommons Logging),并通过配置文件或代码设置具体的日志实现(Log4jLogback)。这样,应用程序就可以通过调用日志门面的接口来记录日志,而具体的日志记录将由所配置的日志实现来处理。这种分离的设计允许开发人员更方便地切换和管理日志框架,并提供了更大的灵活性和扩展性。

常见的日志框架图:


三,日志信息

Spring Boot 项目刚创建好,直接运行项目后就会有日志信息打印,日志信息如下:

以上就是新创建的项目运行后控制台打印的日志信息,说明 Spring Boot 项目内置了日志框架。

日志信息格式:


四,日志级别

日志级别介绍及分类

日志级别(Log Levels)是指日志消息的优先级或者重要程度,它用于对日志的不同类型和重要程度进行分类和过滤。

不同的日志框架可能使用不同的命名和数量的日志级别,但基本概念是相似的。以下是常见的几个标准日志级别:

1,TRACE(追踪):最低级别的日志,包含详细的调试信息,用于追踪代码的执行流程,如方法的输入参数、内部状态等。

2,DEBUG(调试):用于输出调试信息,在开发和调试阶段使用,帮助排查问题和跟踪代码执行情况以及验证程序的行为。

3,INFO(信息):提供程序运行过程中的重要信息,用于向用户提供一些关键的操作状态和进度,如程序启动关闭、配置项变更等。

4,WARN(警告):表示潜在的问题或异常情况,不会阻止程序继续执行,但可能会影响程序的正常运行,需要开发人员注意。

5,ERROR(错误):表示错误情况,通常表示某个功能或步骤无法正常完成,但程序仍然可以继续运行,需要开发人员关注和解决。

6,FATAL(致命):最高级别的日志,表示最严重的错误,表示程序无法继续运行,会导致应用程序的中断或崩溃,如系统崩溃。

特别说明:以上日志级别由上往下依次增强,而日志级别越高,控制台打印出的日志信息就越少,但打印出的日志信息越重要。


日志级别设置

项目设置的日志级别默认为 INFO,也就是控制台只打印收到的INFOWARNERRORFATAL级别的日志,而TRACEDEBUG级别的日志不进行打印。

如果想打印DEBUG级别以上的日志信息,就需要对日志级别进行配置操作。那如何进行日志级别的设置呢?

解答:日志级别配置只需要在配置文件中设置 1ogging.leve1 配置项就行,配置文件如下:

项目重新运行结果,就可以看到DEBUG级别以上的日志了。


五,日志打印

在实际开发中,有时我们需要自定义地打印一些自定义的日志信息,根据自定义的日志信息进行程序代码的调试以及其他操作。

自定义打印日志的实现需要2步操作,分别为在程序中获取打印对象和调用打印对象的相关语法输出打印的日志内容。

1,在程序中获取打印对象

在程序中获取日志对象需要使用日志工厂LoggerFactory

2,调用打印对象的相关方法

java 复制代码
public void someMethod() {
    log.trace("trace 级别");
    log.debug("debug 级别");
    log.info("info 级别");
    log.warn("warn 级别");
    log.error("error 级别");
}

3,在项目的启动类实例化对象,并调用上述方法,运行项目就可以在控制台上看到项目的打印日志。

注意说明:因上面操作将日志级别设置为了DEBUG,所以只打印了DEBUG级别以上的日志信息,而TRACE级别的日志信息没打印。


六,日志持久化

日志持久化是指将应用程序的日志信息保存到持久化存储介质中,以便后续的检索,分析和备份。

常见的日志持久化方式就是将应用程序的日志信息保存到本地目录或文件中。

1,设置日志文件的保存目录

yaml 复制代码
# 日志文件的保存目录设置
logging:
  file:
    path: D:\Project Log

项目运行后,系统会将日志信息保存到指定路径目录下名为spring.log的文件中,该文件是系统自动创建的。

2,设置日志文件的保存文件名

yaml 复制代码
# 日志文件的保存文件设置
logging:
  file:
    name: D:\Project Log\Spring Boot.log

项目运行后,系统会将日志信息保存到指定保存文件名为Spring Boot.log的文件中。


结语

这就是本期博客的全部内容啦!如果有什么其他的问题无法自己解决,可以在评论区留言哦!

最后,如果你觉得这篇文章写的还不错的话或者有所收获的话,麻烦小伙伴们动动你们的小手,给个三连呗(点赞👍,评论✍,收藏📖),多多支持一下!各位的支持是我最大的动力,后期不断更新优质的内容来帮助大家,一起进步。那我们下期见!


相关推荐
drebander15 分钟前
使用 Java Stream 优雅实现List 转化为Map<key,Map<key,value>>
java·python·list
乌啼霜满天24918 分钟前
Spring 与 Spring MVC 与 Spring Boot三者之间的区别与联系
java·spring boot·spring·mvc
tangliang_cn24 分钟前
java入门 自定义springboot starter
java·开发语言·spring boot
程序猿阿伟24 分钟前
《智能指针频繁创建销毁:程序性能的“隐形杀手”》
java·开发语言·前端
Grey_fantasy34 分钟前
高级编程之结构化代码
java·spring boot·spring cloud
新知图书35 分钟前
Rust编程与项目实战-模块std::thread(之一)
开发语言·后端·rust
弗锐土豆41 分钟前
工业生产安全-安全帽第二篇-用java语言看看opencv实现的目标检测使用过程
java·opencv·安全·检测·面部
Elaine20239142 分钟前
零碎04 MybatisPlus自定义模版生成代码
java·spring·mybatis
盛夏绽放1 小时前
Node.js 和 Socket.IO 实现实时通信
前端·后端·websocket·node.js
小小大侠客1 小时前
IText创建加盖公章的pdf文件并生成压缩文件
java·pdf·itext