操作日志收集
操作日志的收集主要是通过 AOP 来实现。通过 @ServiceOperation
注解来标注需要收集操作日志的方法,然后由 ServiceOperationAdvice
来收集日志并持久化到数据库中。
上面提到的类的全限定名
- org.dblue.core.aspect.ServiceOperation
- org.dblue.application.module.logs.adapter.aspect.ServiceOperationAdvice
一般情况下,需要加在应用服务中的操作类接口上。如添加数据、更新数据等,无需再查询类方法上添加此注解。正因如此,才将操作日志收集的功能设计为通过注解收集,而非通过控制层方法收集。考虑到实际的业务系统中可能通过消息来修改数据,使用注解的方式同样可以对其进行收集。
使用说明
@Target({METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface ServiceOperation {
/**
* 操作名称
*
* @return 操作名称
*/
String value();
}
该注解只有一个字段,即 value
,此字段用于标识操作的名称。
下面是一个使用的示例:
org.dblue.application.module.department.domain.service.impl.DepartmentDomainServiceImpl#add
@ServiceOperation("新增部门")
@Transactional(rollbackFor = Exception.class)
@Override
public void add(DepartmentAddDto addDto) {
//.....
}
无法收集的情况
此注解需要加到实现类的 public
方法上,不能加到接口方法上。加到接口方法上无法正常收集。
收集结果
默认情况下会收集方法的以下信息
- 业务方法类
- 方法名称
- 操作时间
- 操作名称
- 当前用户
- 执行结果(成功/失败)
- 方法执行耗时
- 方法参数
- 方法的返回结果
操作日志列表
方法的参数及返回结果
参考资料
- Pointcut API in Spring:https://docs.spring.io/spring-framework/reference/core/aop-api/pointcuts.html
- Advice API in Spring:https://docs.spring.io/spring-framework/reference/core/aop-api/advice.html
- The Advisor API in Spring:https://docs.spring.io/spring-framework/reference/core/aop-api/advisor.html
其他
- 本系统作为基础脚手架项目,仅对
org.dblue.application.module.department.domain.service.impl.DepartmentDomainServiceImpl
中的方法添加了操作日志收集注解。并未对其他功能进行操作信息的收集。这也是考虑到很多系统并不需要这样的功能,因此并没有大范围的添加操作日志收集功能。 - 如果您不需要此功能可在菜单中禁用此功能,同时移除
org.dblue.application.config.OperationLogAdviceConfiguration
上的@Configuration
注解即可。做完以上两步,系统中不会出现操作日志的菜单,同时也不会再通过AOP收集操作日志。
更详细的配置策略,参考《开发者指南-自定义操作日志收集》