一、AopLog介绍与使用
AopLog是基于SpringAop和ThreadLocal实现的一个对请求方法埋点信息收集与处理的日志工具包。git地址(有详细的介绍和使用方法):跳转
使用方法:
1、先在pom中引入依赖:
<dependency>
<groupId>com.github.ealenxie</groupId>
<artifactId>aop-log</artifactId>
<version>2.5</version>
</dependency>
2、新建自定义全局的日志收集器实现收集 LogCollector:
@Slf4j
// 向Spring容器中注册bean
@Component
// 继承LogCollector
public class AopLogCollector implements LogCollector {
@Autowired
// 注入数据库持久层(项目使用的是Spring-Data-JPA)
private SysLogDataRepository sysLogDataRepository;
/**
* 实现LogCollector的collect方法
* @param logData 埋点日志对象,存储各种埋点数据
*/
@Override
public void collect(LogData logData) {
// 项目中的DO类,属性参数类似LogData
SysLogData sysLogData = new SysLogData();
// 将LogData中的属性拷贝到DO对象中
BeanUtil.copyProperties(logData, sysLogData);
// 获取当前的操作用户
String username = SysJwtTokenUtil.getUsername();
// 设置当前操作用户
sysLogData.setUserName(username);
// 设置创建时间(操作时间)
sysLogData.setCreateTime(new Date());
// 存入数据库
sysLogDataRepository.saveAndFlush(sysLogData);
}
}
3、使用AopLog注解进行埋点收集(这里使用项目中的删除接口为例):
@Slf4j
@RestController
public class AppBannerController extends AdminController {
@Autowired
private AppBannerService appBannerService;
// 使用@AopLog注解进行埋点收集
@AopLog(type = "banner配置删除操作", headers = "token")
@PostMapping("/banner/del")
public ApiResult delete(@RequestBody AppBanner appBanner) {
if (appBanner.getId() == null || appBanner.getId() < 1) {
return ApiResult.fail(-1, "id错误");
}
appBannerService.de