跳到主要内容

操作日志收集

操作日志的收集主要是通过 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();
}
java

该注解只有一个字段,即 value,此字段用于标识操作的名称。

下面是一个使用的示例:

org.dblue.application.module.department.domain.service.impl.DepartmentDomainServiceImpl#add
@ServiceOperation("新增部门")
@Transactional(rollbackFor = Exception.class)
@Override
public void add(DepartmentAddDto addDto) {
//.....
}
java
无法收集的情况

此注解需要加到实现类的 public 方法上,不能加到接口方法上。加到接口方法上无法正常收集。

收集结果

默认情况下会收集方法的以下信息

  • 业务方法类
  • 方法名称
  • 操作时间
  • 操作名称
  • 当前用户
  • 执行结果(成功/失败)
  • 方法执行耗时
  • 方法参数
  • 方法的返回结果

操作日志列表

操作日志

方法的参数及返回结果

参数及返回结果

参考资料

其他

  • 本系统作为基础脚手架项目,仅对 org.dblue.application.module.department.domain.service.impl.DepartmentDomainServiceImpl 中的方法添加了操作日志收集注解。并未对其他功能进行操作信息的收集。这也是考虑到很多系统并不需要这样的功能,因此并没有大范围的添加操作日志收集功能。
  • 如果您不需要此功能可在菜单中禁用此功能,同时移除 org.dblue.application.config.OperationLogAdviceConfiguration 上的 @Configuration 注解即可。做完以上两步,系统中不会出现操作日志的菜单,同时也不会再通过AOP收集操作日志。

更详细的配置策略,参考《开发者指南-自定义操作日志收集》