【千锋教育java教程SpringBoot2全套,springboot快速入门到项目实战视频教程】
记录应用系统日志主要有三个原因记录操作轨迹、监控系统运行状况、回溯系统故障。
记录操作行为及操作轨迹数据,可以数据化地分析用户偏好,有助于优化业务逻辑,为用户提供个性化的服务。
例如,通过 access.log记录用户的操作频度和跳转链接,有助于分析用户的后续行为。
全面有效的日志系统有助于建立完善的应用监控体系,由此工程师可以实时监控系统运行状况,及时预警,避免故障发生。
监控系统运行状况,是指对服务器使用状态,如内存、CPU 等使用情况,应用运行情况如响应时间QPS 等交互状态﹔应用错误信息,如空指针、SQL异常等的监控。
例如,在CPU使用率大于60%,四核服务器中load 大于4时发出报警,提醒工程师及时处理,避免发生故障。
当系统发生线上问题时,完整的现场日志有助于工程师快速定位问题。
例如当系统内存溢出时,如果日志系统记录了问题发生现场的堆信息,就可以通过这个曰志分析是什么对象在大量产生并且没有释放内存,回溯系统故障,从而定位问题。
【日志门面(日志的抽象层)】
【日志实现】
门面设计模式是面向对象设计模式中的一种,日志框架采用的就是这种模式,类似JDBC的设计理念。
它只提供一套接口规范,自身不负责日志功能的实现。目的是让使用者不需要关注底层具体是哪个日志库来负责日志打印及具体的使用细节等。
目前用得最为广泛的是slf4j。
负责实现日志相关功能,主流日志库有三个分别为︰
logback是最晚出现的,与log4j同一个作者,是log4j的升级版且本身实现了slf4j的接口
老工程直接使用日志库API完成日志打印,要改成业界标准的门面模式(如slf4j+logback) ,但是老工程代码打印日志地方太多难以改动,这是就需要一个适配器来完成从旧日志库的API到slf4j的路由,这样在不改动原有代码的情况下也能使用slf4j来统一管理日志(如:log4j-over-slf4j),后续自由替换具体日志库也不成问题。
在开发的时候不应该直接使用日志实现类,应该使用日志的抽象层。
具体参考SLF4J官方。https://www.slf4j.org/manual.html
下图是SLF4J结合各种日志框架的官方示例,从图中可以清晰的看出SLF4JAPI永远作为日志的门面,直接应用与应用程序中。

SpringBoot 的底层 spring-boot-starter-logging

可以看出,它依赖着三个日志框架:
它们的区别:
【注意】
Spring Boot采用了slf4j+logback的组合形式,Spring Boot也提供对JUL、log4j2、Logback提供了默认配置
由于每一个日志的实现框架都有自己的配置文件,所以在使用SLF4j之后,配置文件还是要使用实现日志框架的配置文件。