web俱乐部日志中心02

构建一个 Spring Boot Starter

Spring Boot Starter:介绍、对比、使用场景和如何自定义:

Spring Boot Starter:介绍、对比、使用场景和如何自定义Spring Boot Starter 是一组便 - 掘金 (juejin.cn)

在这个项目中,因为日志报告会有许多重复部分,比如成功或者失败的时候都会需要许多相同的功能模块,比如时间日期,定位包位置 ,

  • Starter依赖:一个包含所有必需依赖的starter,方便开发者一键引入。
  • 自动配置:自动配置类,用于根据配置文件自动设置日志系统。
  • 配置文件:提供默认的配置文件模板,如application.properties或application.yml中的日志配置项。
  • 日志Appender:自定义的日志Appender,用于将日志输出到不同的目的地。
  • 日志布局:定义日志的布局,包括日志的格式和内容。
  • 条件注解:使用Spring的条件注解,如@ConditionalOnProperty,来根据配置启用或禁用特定的日志功能。

 日志中心需要包含复杂的初始化逻辑,比如配置特定的日志格式、日志级别、日志存储策略、异步处理机制等,那么将这些逻辑封装到一个自定义的 Spring Boot Starter 中是一个非常好的做法

SDK:

日志中心可以被视为一种特殊的 SDK(软件开发工具包)。在这种情况下,它提供了一组用于日志记录的 API 和工具,允许开发者在应用程序中轻松实现日志功能。这个 SDK 封装了日志记录的复杂性,提供了简单易用的接口,以便开发者能够集中精力于业务逻辑而不是日志系统的细节。

对于一个日志中心 SDK,它可能包含以下特点:

  1. 日志记录 API:提供一组方法来记录不同级别的日志(如 debug、info、warn、error)。

  2. 配置管理:允许开发者通过配置文件或代码来设置日志级别、格式、输出目标等。

  3. 异步处理:为了不阻塞主应用程序流程,提供异步日志记录的能力。

  4. 日志格式化:支持自定义日志消息的格式,包括时间戳、日志级别、线程信息等。

  5. 日志路由:能够将日志消息路由到不同的目的地,如控制台、文件、数据库或远程日志服务器。

  6. 性能优化:确保日志记录操作对应用程序性能的影响最小化。

  7. 安全性:提供日志脱敏、加密等功能,以保护敏感信息。

  8. 集成支持:能够与其他系统(如监控工具、告警系统)集成,提供更全面的日志解决方案。

  9. 多环境支持:提供在不同环境(开发、测试、生产)下灵活配置的能力。

在你的 Spring Boot Starter 中,你可以将这些日志中心的功能作为自动配置的一部分,使得开发者只需要添加一个依赖就能够在他们的 Spring Boot 应用程序中启用这些日志功能。这样,你的 Starter 不仅简化了日志记录的初始化和配置,而且提供了一个完整的日志记录解决方案,即日志中心 SDK。

这里我采用aop的思想来实现日志中心,可以大大的降低日志记录逻辑和业务逻辑的耦合程度。

2.通过定义一个切面,可以在一个地方集中管理所有需要记录日志的点,而不是在每个方法中重复相同的日志记录代码。

3.AOP允许在不修改原有业务代码的情况下,动态地添加或修改日志记录的行为,提高了代码的灵活性。

我通过opratRecord和requeestmapping自定义注解与实现绑定

  • operateContent():定义了操作的内容描述,这是一个默认值可以为空的字符串。
  • convert():指定一个类,这个类必须实现Convert接口。这个类用于将方法的参数转换为OperateLog对象,以便记录日志。

 这个注解被标记在方法上,表明这些方法的执行需要被记录日志。可以灵活地控制哪些方法需要记录日志,以及如何记录日志。

 代码解读:

  1. 切面定义:在AOP代码中,OperateAspect类定义了一个切面,用于拦截被@OperateRecord注解标记的方法。
  2. 切点(Pointcut)
    • @Pointcut注解定义了一个切点,它指定了拦截规则,即拦截所有被@OperateRecord注解标记的方法。
  3. 环绕通知(Around Advice)
    • @Around注解的around方法用于在目标方法执行前后添加额外的行为。在这个方法中,首先执行目标方法(通过proceedingJoinPoint.proceed()),然后异步地记录日志。
    • 日志记录逻辑包括获取方法的注解信息(OperateRecord),创建OperateLog对象,并设置操作内容和结果。

协同工作

  • 当一个方法被@OperateRecord注解标记时,这个方法的执行就会被OperateAspect切面拦截。
  • around方法中,通过反射获取方法上的OperateRecord注解,读取注解的属性值,包括操作内容和转换类。
  • 使用注解中指定的转换类(实现Convert接口的类)来将方法的参数转换为OperateLog对象。
  • 最后,将这个OperateLog对象的相关信息(如操作内容和执行结果)记录到日志中。

service层调用方法,来实现对于增删改查的记录 

数据脱敏:

 基于Hutool优雅实现基于Hutool优雅实现数据脱敏在掘金上看到一些关于数据脱敏的文章,也有使用Hutool编写的数据脱敏方案。但在部分处理 - 掘金 (juejin.cn)

自定义一个简单的脱敏序列化工具 

这里将传入的手机号的明文格式转换为json格式, 将传入的字符串参数 str 转换为固定电话脱敏形式。
使用 JsonGenerator 将脱敏后的字符串写入 JSON 输出流。

对于记录方法的入参出参也是采用aop的思想:

 

并且将入参出参序列化 

数据库:

 增加了对于mysql这种关系型数据库和mongodb这种文档型数据库的理解,也知道了为什么该日志中心使用

MongoDB 可以作为日志中心的数据库,特别是当日志数据以非结构化或半结构化形式存在,且对读写性能要求较高时在mongo进行。而且满足多一个业务用户就可以新建一张表的需求。

客户想建几张表就建几张表,想添加几个字段就添加几个字段,反正字段全都用中文加下划线数据类型,然后用前端表单添加就行了,核心业务字段不让删。反正绝大多数客户的需求整个就是一个高级的Excel而已。至于统计客户最多也就几百万数据,内存大点全部都可以放入内存中。只要不是高并发,无论是管道聚合还是mapreduce性能都是没得说的。原本一个月的需求,结果还没开始就结束了,写个通用组件直接交给实施。客户每张表搞几百个字段,爱咋玩咋玩。至于业务逻辑也简单,其实就是建立一个审批流表,查询审核到哪步了而已 

  1. 灵活的表结构:MongoDB 允许用户创建动态的文档结构,这意味着可以在不删除核心业务字段的情况下,随意添加或修改字段。这种灵活性使得 MongoDB 非常适合快速变化的数据模型和业务需求。

  2. 无需预定义模式:在 MongoDB 中,不需要像关系型数据库那样预先定义表的模式(schema)。这使得用户可以轻松地根据需要调整数据结构,而不需要进行复杂的数据库迁移或修改。

  3. 大量的字段:MongoDB 的文档可以包含大量的字段,这对于某些应用来说是一个优势,因为它们可能需要存储大量的元数据或属性。

  4. 内存中的数据处理:MongoDB 可以利用大量的内存来缓存热点数据,这有助于提高数据检索的速度。对于数据量不是特别大(如几百万条记录)的应用,这可以显著提高性能。

  5. 简单的统计和聚合:MongoDB 提供了强大的聚合框架,可以轻松实现数据的统计和聚合操作,类似于 SQL 中的 GROUP BY 和 JOIN 操作。

  6. 非高并发场景:在非高并发的场景下,MongoDB 可以提供非常好的性能。它的管道聚合和 MapReduce 功能可以有效地处理数据。

  7. 通用组件:由于 MongoDB 的灵活性,可以为不同的客户或项目创建通用的数据存储组件,而不需要为每个项目定制数据库模式。

  8. 审批流表:描述中提到的审批流表可能是一个特定的业务逻辑,MongoDB 可以通过文档中的嵌入字段或引用来轻松实现这种类型的数据模型。

总的来说,这段描述强调了 MongoDB 在处理灵活数据模型、不需要复杂预定义结构、以及在非高并发环境下的性能优势。这些特性使得 MongoDB 成为许多现代应用的理想选择,特别是那些需要快速迭代和灵活数据结构的应用。

Docker启动 

先在根目录下创建compose.yml文件,写好dockerfile然后在打开dockerdesktop,在任务管理器中确定docker是否已经启动 

在gitlab上手动新建一个maven仓库 

通过GitLab CI/CD发布maven项目到私有仓库 - 简书

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值