💓 博客主页:从零开始的-CodeNinja之路
⏩ 收录文章:【Spring Boot】深入解密Spring Boot日志:最佳实践与策略解析
🎉欢迎大家点赞👍评论📝收藏⭐文章
日志对我们来说并不陌⽣,通过打印日志来发现和定位问题,或者根据日志来分析程序的运行过程.
日志的用途
Spring Boot中的日志管理是非常重要的,它可以帮助开发人员在应用程序运行时跟踪问题、监控性能并记录关键信息。通过配置适当的日志级别和输出格式,开发人员可以更好地理解应用程序的行为并快速定位和解决问题。Spring Boot提供了灵活且强大的日志管理功能,使开发人员能够轻松地集成和配置各种日志框架,如Logback、Log4j2等,以满足不同项目的需求。
从上图可以看到,日志输出内容元素具体如下:
日志级别代表着日志信息对应问题的严重性,为了更快的筛选符合⽬标的日志信息.
日志的级别从高到低依次为:FATAL、ERROR、WARN、INFO、DEBUG、TRACE
日志级别的顺序:
级别越高,收到的消息越少
SpringBoot内置了日志框架 Slf4j ,我们可以直接调用 Slf4j 来输出日志
添加lombok依赖
org.projectlombok lombok true
输出⽇志
lombok提供的 @Slf4j 会帮我们提供⼀个日志对象log,我们直接使用就可以.
import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.RestController; @Slf4j @RestController public class LogController { public void log(){ log.info("--------------要输出⽇志的内容----------------"); } }
SLF4J是门面模式的典型应用(但不仅仅使⽤了门面模式).SLF4J不同于其他日志框架,它不是⼀个真正的日志实现,而是⼀个抽象层,对日志框架制定的⼀种规范,标准,接口.所有SLF4J并不能独⽴使用,需要和具体的日志框架配合使用.
门面模式定义
门面模式(FacadePattern)⼜称为外观模式,提供了⼀个统⼀的接口,用来访问子系统中的⼀群接口.
其主要特征是定义了⼀个高层接口,让子系统更容易使用.
原文:Provideaunifiedinterfacetoasetofinterfacesinasubsystem.Facadedefinesahigherlevelinterfacethatmakesthesubsystemeasiertouse.
解释:要求⼀个⼦系统的外部与其内部的通信必须通过⼀个统⼀的对象进⾏.门面模式提供⼀个⾼层 次的接⼝,使得⼦系统更易于使⽤.
门面模式主要包含2种角色: 外观角色(Facade):也称门面角色,系统对外的统⼀接口. 子系统角色(SubSystem):可以同时有⼀个或多个SubSystem.每个SubSytem都不是⼀个单独的类, 而是⼀个类的集合.SubSystem并不知道Facade的存在,对于SubSystem而⾔,Facade只是另⼀个 客户端而已(即Facade对SubSystem透明)
⽐如去医院看病,可能要去挂号,门诊,化验,取药,让患者或患者家属觉得很复杂,如果有提供接待⼈
员,只让接待⼈员来处理,就很方便.
门面模式的实现
场景:回家,我们会开各个屋的灯.离开家时,会关闭各个屋的灯 如果家⾥设置⼀个总开关,来控制整个屋的灯就会很方便.
门面模式的优点
• 减少了系统的相互依赖.实现了客户端与子系统的耦合关系,这使得子系统的变化不会影响到调⽤它
的客户端;
• 提高了灵活性,简化了客户端对子系统的使用难度,客户端无需关心子系统的具体实现方式,而只需
要和门面对象交互即可.
• 提高了安全性.可以灵活设定访问权限,不在门面对象中开通⽅法,就无法访问
SLF4J就是其他日志框架的门面.SLF4J可以理解为是提供日志服务的统⼀API接⼝,并不涉及到具体的
日志逻辑实现.
不引入日志门面
常见的日志框架有log4J,logback等.如果⼀个项目已经使用了log4j,而你依赖的另⼀个类库,假如是
ApacheActiveMQ,它依赖于另外⼀个日志框架logback,那么你就需要把logback也加载进去.
存在问题:
个配置⽂件是指用户⾃定义的配置⽂件).
引入日志门面
引⼊门面日志框架之后,应⽤程序和日志框架(框架的具体实现)之间有了统⼀的API接⼝(门面日志框架
实现),此时应⽤程序只需要维护⼀套日志⽂件配置,且当底层实现框架改变时,也不需要更改应⽤程序代
码
SLF4J就是这个日志门面.
总的来说,SLF4J使你的代码独立于任意⼀个特定的日志API,这是⼀个对于开发API的开发者很好的思
想.
架,默认情况下使用的是info日志级别将日志输出到控制台的,我们可以通过lombok提供的
@Slf4j 注解和 log 对象快速的打印自定义日志.
或保存目录来将日志持久化