- 支持日志方法上的重入
- 支持日志参数的穿透
- 完成SpringAop
- 支持Spel的参数解析
- 支持自定义方法扩展
- 自定义日志持久化
- Condition条件判断
@Record(success = "XXX已完成,参数:`Spel解析式`",fail="XXX已完成,参数:`Spel解析式`",businessCode="XXX服务")
为什么选择Spel? 其实市面上除了Spel还有很多可以选择的表达式语言,一个是考虑到在日志种不会出现过于复杂的表达式,再者国内大多数的开发使用spring作为开发框架,对于spel的学习成本更低
Spel的解析式可以解析的参数是方法的入参和自定义参数:
- 方法的入参
- 默认的解析名是参数名,也可以使用@LogParam(name="")来指定名称
- 流程中自定义的参数
- 使用
RecordContextManager.INSTANCE.addParam(key,value);
来指定名称
- 使用
参数的穿透是指,当A方法调用B方法B方法的日志希望使用A方法中的参数,或者B方法的日志希望使用A方法的参数
- 方法的入参
- 使用
@LogParam(isAcross=true)
即可穿透使用
- 使用
- 流程中自定义的参数
- 使用
RecordContextManager.INSTANCE.addParam(key,value,true);
即可穿透使用
- 使用
当发生A方法调用B方法时,A方法和B方法都存在该日志注解
再次createRecord对象时会从当前线程中获取到日志操作上下文
step前进一步,通过List<Map>隔离参数,同时实现参数穿透的方案
然后在执行结束后调用RecordSupport.clear使step后退一步
当退到0时清理线程中的上下文,以此来解决重入
持久化日志是使用者自定义的方案,需实现RecordPersistence
接口
可以使用spring容器
例如获取操作人对象,需实现RecordRootObject
接口 可以使用spring容器
需在配置类上注解@EnableRecord
根据统计刨除IO操作,耗时在1-3ms之间,基本无影响
解析前会优先解析condition,如果condition判断没有通过会阻止后续流程
独立于success和fail外创建了这个扩展参数属性,原因是在成功或者失败的情况下都希望存储的一个值不用去污染成功或失败的日志