【Java日志系列实践2】AOP切面实现业务日志

本文介绍了如何使用AOP实现业务日志,包括操作日志记录内容和常见形式,深入讲解了AOP的四个关键元素,并详细阐述了切面日志的实现过程,如创建日志拦截器、统一日志处理切面以及在业务中使用日志注解。还提到了代码逻辑中避免的一些坑,如避免JSON编码和处理NULL值。
摘要由CSDN通过智能技术生成

1 业务日志的标准

业务日志,也叫操作日志。主要功能: 记录用户行为,方便业务数据回溯与统计。

1.1 操作日志记录内容

操作日志记录主要内容:用户是谁,在什么时间,对什么数据,做了什么样的更改。
逻辑中必须增加业务日志的位置:
(1)业务数据的变更处(新增、修改、删除)
(2)特别分支条件、边界条件处。

1.2 业务常见的日志记录形式

● 动态的文本记录,比如:2022-03-12 10:00 订单创建,创建用户“小新”,订单号:NO.123456 ”。
● 修改类型的文本,包含修改前和修改后的值,比如:2021-03-12 11:00 用户“小新”修改了订单收货人:“小新”修改成“小花” 。

public Result applyOrder(orderRequest request){
   
    // 业务逻辑blabla...
    OperateLogModel operateLogModel = new  OperateLogModel();
    operateLogModel.setOperateIp();          //1、业务操作IP地址
    operateLogModel.serO[erateMis();         //2、操作人mis
    operateLogModel.setOperateDegist();      //3、业务操作具体描述           
    operateLogModel.setUserOperateType();    //4、权限操作类型; 0:增加 1:删除 2:修改
    operateLogModel.setCreateTime();         //5、操作日志生成时间 
}

2 背景知识

AOP(Aspect-Oriented Programming)中文意思是面向切面编程。通过运行期的动态代理,实现在不修改源代码的情况下给程序动态添加功能的编程范式。可以对业务逻辑的各个模块进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

2.1 AOP实现的四个关键元素

切面(Aspect):用于封装通用部分的组件(或者模块),比如日志组件。让日志模块可以被切入到其他目标业务方法上。
连接点(JointPoint):程序执行的某个特定位置,是抽象概念,不涉及代码实现。(Spring仅支持方法的连接点,即仅能在方法调用前、方法调用后、方法抛出异常时以及方法调用前后这些程序执行点织入增强)
切入点(PointCut):用于指定哪些组件方法调用方面(共通)处理, 切点相当于查询条件,连接点相当于记录,一个切点可以匹配多个连接点
通知(Advice):常被称为“增强”,满足切入点的一段执行代码。Spring的AOP,会将 advice 模拟为一个拦截器(interceptor),并且在 join point 上维护多个 advice,进行层层拦截。
前置通知(Before):在目标方法调用前调用通知功能;
后置通知(After):在目标方法调用之后调用通知功能,不关心方法的返回结果;
返回通知(AfterReturning):在目标方法成功执行之后调用通知功能;
异常通知(AfterThrowing):在目标方法抛出异常后调用通知功能;
环绕通知(Around):通知方法会将目标方法封装起来,在目标方法调用之前和之后执行自定义的行为。

2.2 切面业务日志的核心实现流程

  1. 建立日志拦截器,自定义模板
  2. 创建日志处理切面
  3. 在业务接口(controller)方法上增加日志注解。

3 切面日志的实现

3.1 创建日志拦截器

修饰符 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值