当前位置: 首页 > news >正文

【JavaEE】(16) Spring Boot 日志

一、什么是日志

        在之前,我们为了发现并定位问题,使用 System.out.println 来打印日志。但当系统比较复杂时,我们希望日志还能有日志分类、持久化(保存到磁盘)等更高级的功能,就需要使用专业的日志框架。

        实际上,日志不仅有发现并定位问题的功能,还有一些其他的功能:

  • 系统监控:监控响应时间(要让用户体验感好),监控关键字出现的次数(达到一定阈值就警报)等。
  • 数据采集:比如采集用户对商品的浏览量、点击量等,根据这些数据来实现推荐排序。
  • 日志审计:日志也是国家安全要求的,比如有犯罪份子做了坏事,就需要配合警方查询日志,就算证据被犯罪分子删除,也能从日志中查询是谁删除的等信息。

二、日志框架

1、日志框架

        日志门面是实现类的抽象类,相当于前台。我们不需要操作日志实现,只需操作日志门面提供的接口即可。这属于门面设计模式。

2、门面模式(外观模式)

        定义:提供一个统一的接口,来操作所有子系统的接口,便于操作子系统。

        例子:若没有总开关(门面系统),我们需要分别开、关每个房间(子系统)的灯;若有门面系统(相当于有很多按钮的控制台),就可以在其中定义总开关、任意两个房间的开关、单独一个房间的开关等,让用户对灯的控制更方便。

        没有门面系统:

        Light.java:开关抽象类

package com.edu.springiocdemo.facede;public interface Light {void turnOn();void turnOff();
}

        LivingLight.java:客厅的开关

package com.edu.springiocdemo.facede;public class LivingLight implements Light {@Overridepublic void turnOn() {System.out.println("Living room light is on.");}@Overridepublic void turnOff() {System.out.println("Living room light is off.");}
}

        BedroomLight.java:卧室的开关

package com.edu.springiocdemo.facede;public class BedroomLight implements Light {@Overridepublic void turnOn() {System.out.println("Turning on the bedroom light");}@Overridepublic void turnOff() {System.out.println("Turning off the bedroom light");}
}

        BathroomLight.java:厕所的开关

package com.edu.springiocdemo.facede;public class BathroomLight implements Light {@Overridepublic void turnOn() {System.out.println("Bathroom light is on.");}@Overridepublic void turnOff() {System.out.println("Bathroom light is off.");}
}

        用户开、关每个房间的灯:分别操作每个子系统

package com.edu.springiocdemo.facede;public class Main {public static void main(String[] args) {LivingLight livingLight = new LivingLight();BedroomLight bedroomLight = new BedroomLight();BathroomLight bathroomLight = new BathroomLight();livingLight.turnOn();bedroomLight.turnOn();bathroomLight.turnOn();livingLight.turnOff();bedroomLight.turnOff();bathroomLight.turnOff();}
}

        加入门面系统:

package com.edu.springiocdemo.facede;public class FacedeLight {private LivingLight livingLight;private BedroomLight bedroomLight;private BathroomLight bathroomLight;public FacedeLight() {livingLight = new LivingLight();bedroomLight = new BedroomLight();bathroomLight = new BathroomLight();}public void turnOnAll() {livingLight.turnOn();bedroomLight.turnOn();bathroomLight.turnOn();}public void turnOffAll() {livingLight.turnOff();bedroomLight.turnOff();bathroomLight.turnOff();}
}

        用户开、关每个房间的灯:仅操作门户系统

package com.edu.springiocdemo.facede;public class Main {public static void main(String[] args) {FacedeLight facedeLight = new FacedeLight();facedeLight.turnOnAll();facedeLight.turnOffAll();}
}

3、门面模式的优点

  • 客户端和子系统解耦合,子系统修改不会影响到客户端。
  • 简化客户端对子系统的使用。
  • 提高安全性,只能操作门面系统提供的接口。

4、SLF4J 框架

        SLF4J 就是提供日志框架服务的统一接口,如果没有这个统一接口,那么就会存在一些问题:当应用程序和第三方库使用的是不同的日志框架,如 log4j 和 logback,那么它们就有不同的配置文件,就可能存在配置冲突的问题和版本冲突问题。

        若设计了日志门面,则可通过同一个门面操作不同的框架,它们的配置文件也是同一个。

三、日志的使用

1、日志格式

2、日志级别

        可以根据重要程度,过滤掉不想看的级别的日志(但级别低的需要时也能查看)。级别从高到低:

  • FATAL:致命信息,系统级错误。logback 不能打印 fatal 级别,程序生命周期中只允许一次 fatal,系统崩溃了很容易被发现。
  • ERROR:错误信息,存在错误但不影响系统继续运行。
  • WARN:警告信息,不影响使用,但长期存在需要注意。
  • INFO:普通信息,程序正常运行的信息。
  • DEBUG:调试信息。
  • TRACE:追踪信息,比 DEBUG 更细致,很少用。

        日志级别的设置,根据开发人员的经验主观判断。这与测试人员的 Bug 级别无关,比如根据金额损失程度、点击量减少度来定级 Bug。

        日志输出级别默认INFO 及其以上,若要看更低级别的日志,需要配置。

四、日志配置

        更多配置查看官方文档。(实际开发中,日志配置由元老干,菜鸟没权利,我们只是简单了解,看到了看得懂。实际的日志不会用 spring boot 自带的【功能不够用】,会下载 logback 库使用)Logging :: Spring Boothttps://docs.spring.io/spring-boot/reference/features/logging.html

1、配置日志级别

2、持久化日志

        把所有日志保存到硬盘:绝对路径/相对路径。

  • 配置日志文件名:可以配置路径和文件名,且与配置路径同时存在时,优先级更高。
  • 配置日志文件路径:只能配置文件路径。

3、配置日志文件分割

  • 配置分割日志命名格式。
  • 配置分割日志大小。(一般是配置 200~500 MB,我们这里为了展示设置 1KB)

4、配置日志格式

  • 配置控制台的日志格式:logging.pattern.console
  • 配置文件中日志格式:logging.pattern.file

        格式:

  • %clr(表达式){颜色}:表达式的颜色
  • %d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd'T'HH:mm:ss.SSSXXX}}:日期时间

        更多格式说明参考 logback 官方文档:

Chapter 6: Layoutshttps://logback.qos.ch/manual/layouts.html#conversionWord       在 IDEA 打开控制台日志的颜色:

五、自动创建日志对象(@Slf4j)

        每个类里面加这句话,创建日志对象很麻烦:

        加 lombok 提供的 @Slf4j 注解自动生成日志对象 log

http://www.dtcms.com/a/337072.html

相关文章:

  • 重温k8s基础概念知识系列四(服务、负载均衡和联网)
  • [免费]基于Python的全国气象数据采集及可视化大屏系统(Flask+request库)【论文+源码+SQL脚本】
  • Android Coil3视频封面抽取封面帧存Disk缓存,Kotlin(2)
  • 你好星识内测,未来是人与AI共创的时代
  • [特殊字符] 什么是 Linux?[特殊字符] 什么是 Shell?[特殊字符] 什么是 Bash? [特殊字符]Linux、Shell、Bash 的关系?
  • 特种行业许可证识别技术:通过图像处理、OCR和结构化提取,实现高效、准确的许可证核验与管理
  • 通过PhotoShop将多张图片整合为gif动画
  • npm设置了镜像 pnpm还需要设置镜像吗
  • Ps 2025 图像编辑 Photoshop(Mac中文)
  • 前端面试通关:Cesium+Three+React优化+TypeScript实战+ECharts性能方案
  • PDF处理控件Aspose.PDF教程:将 PNG 合并为 PDF
  • Arkts加载网页url的pdf发票黑屏问题
  • vscode wsl解决需要用别的用户调试的问题
  • 国产化Excel处理组件Spire.XLS教程:使用 C# 从数据库导出数据到 Excel(含 SQL 示例)
  • Android使用Kotlin协程+Flow实现打字机效果
  • 【内网渗透】CVE-2020-0796 永恒之黑 复现
  • 19.8 《3步实现OPT-6.7B无损量化:用自定义数据集省70%显存,精度仅跌2.3%》
  • (Arxiv-2025)OPENS2V-NEXUS:一个面向主体到视频生成的详细基准与百万规模数据集
  • 设计模式笔记_行为型_迭代器模式
  • 云计算核心技术之容器技术
  • Linux设备树简介
  • LINUX 818 shell:random;for for
  • 电子元器件-电阻终篇:基本原理,电阻分类及特点,参数/手册详解,电阻作用及应用场景,电阻选型及实战案例
  • Docker常见指令速查
  • 矿物分类案例(二)数据填充后使用6种模型训练
  • Docker学习--认识Docker
  • 遥感机器学习入门实战教程 | Sklearn 案例②:PCA + k-NN 分类与评估
  • AWS Neptune:图数据库的强大潜力
  • 【LLM1】大型语言模型的基本生成机制
  • 将 iPhone 连接到 Windows 11 的完整指南