AOP操作日志记录(将增、删、改相关接口的操作日志记录到数据库表中)
发布人:shili8
发布时间:2025-02-16 03:57
阅读次数:0
**AOP操作日志记录**
在软件开发过程中,操作日志记录是非常重要的一环。它可以帮助我们追踪系统的运行情况、发现问题并进行优化。然而,在传统的编程方式下,日志记录往往需要手动编写代码,这会导致重复劳动和维护成本的增加。
AOP(Aspect-Oriented Programming)技术提供了一种更高效的解决方案。通过使用AOP,我们可以将日志记录作为一个独立的模块,与业务逻辑分离,从而提高代码的可读性、可维护性和重用性。
**日志表结构**
首先,我们需要定义一个用于存储操作日志的数据库表。以下是表结构的一个示例:
sqlCREATE TABLE `operation_log` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) DEFAULT NULL COMMENT '用户ID', `operation_type` varchar(255) DEFAULT NULL COMMENT '操作类型(增、删、改)', `operation_object` varchar(255) DEFAULT NULL COMMENT '操作对象(表名或字段名)', `before_data` text COMMENT '修改前数据', `after_data` text COMMENT '修改后数据', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
**AOP日志记录类**
接下来,我们需要创建一个用于记录操作日志的AOP类。以下是示例代码:
javaimport org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.servlet. />import java.util.Date;
@Aspect@Componentpublic class OperationLogAspect {
@Autowired private HttpServletRequest request;
@Before("execution(* *(..))")
public void before(JoinPoint joinPoint) {
//记录操作日志 String userId = request.getAttribute("userId").toString();
String operationType = "增";
String operationObject = "";
String beforeData = "";
String afterData = "";
OperationLog operationLog = new OperationLog(userId, operationType, operationObject, beforeData, afterData);
//保存到数据库 }
@AfterReturning(pointcut = "execution(* *(..))", returning = "result")
public void after(JoinPoint joinPoint, Object result) {
//记录操作日志 String userId = request.getAttribute("userId").toString();
String operationType = "改";
String operationObject = "";
String beforeData = "";
String afterData = "";
OperationLog operationLog = new OperationLog(userId, operationType, operationObject, beforeData, afterData);
//保存到数据库 }
}
**业务逻辑类**
在上面的示例中,我们使用了一个名为`OperationLogAspect`的AOP类来记录操作日志。然而,在实际开发过程中,我们需要将日志记录与具体的业务逻辑类关联起来。
以下是一个示例:
javapublic class UserService {
@Autowired private OperationLogAspect operationLogAspect;
public void createUser(User user) {
//创建用户 operationLogAspect.before(new JoinPoint("createUser", "user"));
//保存到数据库 operationLogAspect.after(new JoinPoint("createUser", "user"), null);
}
public void updateUser(User user) {
//更新用户 operationLogAspect.before(new JoinPoint("updateUser", "user"));
//保存到数据库 operationLogAspect.after(new JoinPoint("updateUser", "user"), null);
}
}
**总结**
通过使用AOP技术,我们可以将日志记录作为一个独立的模块,与业务逻辑分离,从而提高代码的可读性、可维护性和重用性。这种方式不仅可以减少重复劳动,还可以帮助我们更好地追踪系统的运行情况、发现问题并进行优化。
当然,这种方式也有一些局限性,例如需要额外的配置和维护成本。但是,如果你正在开发一个大型的系统,那么这种方式可能会带来非常大的收益。

