接口访问日志

6/1/2022

# 一、背景与问题

对于中后台系统,经常要记录用户做了哪些重点行为日志,比如:
卓大:2022-06-01 20:07:53 ,IP: 232.34.26.13 设备:Chrome 调用:'修改系统配置' 接口,调用参数为 '123456';

# 二、架构与思想

其实这种操作记录,网上有很多教程,最好的实现方式就是使用Spring AOP的切面来去解决,我们也是用的AOP切面解决。

区别点:

  • 我们直接使用了 swagger的 @Api@ApiOperation注解作为了 操作内容,不用在用户手动填写
  • 我们将使用线程池异步回写操作内容

具体代码为:OperateLogAspect.java@OperateLog 注解;

# 三、具体使用

# 3.1、配置

第一步需要配置 异步回写线程池,配置为:OperateLogConfig

public class OperateLogConfig{
    private Function<OperateLogEntity, Boolean> saveFunction; //操作日志存储方法
    private Integer corePoolSize;//核心线程数
    private Integer queueCapacity;//队列大小
}    
1
2
3
4
5

具体需要在项目中的config目录进行配置,比如我们的sa-admin项目中的config目录:

OperateLogAspectConfig.java:

@Configuration
public class OperateLogAspectConfig extends OperateLogAspect{
    /**
     * 配置信息
     * @return
     */
    @Override
    public OperateLogConfig getOperateLogConfig() {
        OperateLogConfig config = OperateLogConfig.builder().corePoolSize(4).queueCapacity(1000).build();
        return config;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12

# 3.2、@OperateLog 注解

在需要记录日志的地方,加入注解@OperateLog,只能加到controller的 ClassMethod 上。

加到 Class 上,就相当于给Controller的每个方法都加上了注解@OperateLog

@OperateLog
@RestController
@Api(tags = AdminSwaggerTagConst.Business.MANAGER_CATEGORY)
public class CategoryController extends AdminBaseController {

    @Autowired
    private CategoryService categoryService;

    @ApiOperation("添加类目 @author 胡克")
    @PostMapping("/category/add")
    public ResponseDTO<String> add(@RequestBody @Valid CategoryAddForm addForm) {
        return categoryService.add(addForm);
    }

    @ApiOperation("更新类目 @author 胡克")
    @PostMapping("/category/update")
    public ResponseDTO<String> update(@RequestBody @Valid CategoryUpdateForm updateForm) {
        return categoryService.update(updateForm);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 四、实现原理

# 4.1、OperateLogAspect切面

核心就是使用了AOP 切面,具体实现类为 OperateLogAspect.java

具体请看代码,代码很简单 (opens new window)


# 联系我们

1024创新实验室-主任:卓大 (opens new window),混迹于各个技术圈,研究过计算机,熟悉点 java,略懂点前端。
1024创新实验室(河南·洛阳) (opens new window) 致力于成为中原领先、国内一流的技术团队,以技术创新为驱动,合作各类项目(软件外包、技术顾问、培训等等)。

告白气球 (钢琴版)
JESSE T