博客系统用户操作日志记录
操作日志本站博客实现admin 发布于:2022-05-09 10:24:29
阅读:loading
关于全局的操作日志记录的功能本站文章实现过的多种不同版本,单从功能实现层面来讲《新的Spring Aop实现全局日志记录功能》这一篇的实现比较新颖和科学,于是本站建站初期将此功能完善后集成至功能中。过多的理论在前面的几篇文章或多或少的都已经说过,本次以具体实现的形式来展示实现的过程以及细节,参考如下。
Log注解定义了操作日志的功能范围,限定标记在方法层,建议的方式是记录在service层面,从@Log注解的形式可以看到日志记录时的功能知识点,主要考虑的有功能名称name、功能描述description、日志参数范围scope、排除参数exclude。
name表示操作日志的功能模块名称,默认为空字符串,系统的默认处理逻辑是获取service类的名称加上方法名称,中间使用小数点分割;
description表示操作日志的功能描述,支持纯文本、方法参数、方法返回值等混合编写;
scope表示操作日志的记录数据范围,提供有All、Auto、METHOD、METHOD_PARAMETER、METHOD_RETURN几种,主要是对方法名称(方法地址包含类名)、方法参数、方法返回值几个范围的参数数据进行参数范围设置,其中All表示3个范围的全部内容,Auto表示方法的信息和参数信息,返回值只有在方法抛异常时记录,否则不记录;
exclude为方法的参数排除,可以设置一些排除的参数类型,默认按照参数的名称进行排除,常见可以排除的类型有Workbook、OutputStream、MultipleFile等,凡是记录没有必要的均可排除,并且在使用JSON序列号的时候还可能会抛异常,因此它们均需要排除。
操作日志的页面查询功能是将用户行为动作记录,主体行为是:谁在什么时间做了什么事情,传递了什么参数,得到了什么结果,花了多长时间,结果是成功了还是失败了,所以将得到了如下的列表数据结果,参考如下
1)特别注意当操作出现错误时,一般不会拿到方法的返回值,所以将异常的堆栈作为返回值进行了返回,可以辅助错误原因;
2)操作日志无论操作成功或失败均应该记录,所以记录操作日志的service与实际被记录的功能方法service不受同一个事物控制;
3)当操作方法开始运行前应该记录日志,带方法执行完毕后再去修改对应的数据,而不应该是仅当方法执行完毕后再记录,区别在于对待执行耗时的方法时,可以通过页面查到一些还正在执行的程序;
4)参考使用@Log(description = "'文章属性-设置' + #property.text" , scope = LogScopeEnum.ALL)或@Log(description = "文章属性-封面上传" , scope = LogScopeEnum.ALL , exclude = "file");
更多代码实现可见本站开放的源代码。
点赞