当前位置:实例文章 » JAVA Web实例» [文章]AOP操作日志记录(将增、删、改相关接口的操作日志记录到数据库表中)

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技术,我们可以将日志记录作为一个独立的模块,与业务逻辑分离,从而提高代码的可读性、可维护性和重用性。这种方式不仅可以减少重复劳动,还可以帮助我们更好地追踪系统的运行情况、发现问题并进行优化。

当然,这种方式也有一些局限性,例如需要额外的配置和维护成本。但是,如果你正在开发一个大型的系统,那么这种方式可能会带来非常大的收益。

其他信息

其他资源

Top