Comments (11)
感谢反馈,很好的一个场景,类似的问题我也碰到过。现在的逻辑,是在原函数执行后进行SpEL的解析的,主要是为了顺便把结果也一起处理了。现在思考下,感觉确实应该放在函数执行前解析会比较合适。晚点我抽空优化一下,如果有更新了在这里@你。
from log-record.
你要是急的话只能先用LogRecordContext临时撑一撑 :)
from log-record.
好的,作者有心了[抱拳]
from log-record.
如果有的场景需要在执行前解析,有的场景需要在执行后再解析呢。
from log-record.
如果有的场景需要在执行前解析,有的场景需要在执行后再解析呢。
其实是个权衡问题,目前来看碰到的业务场景,其实很多都和上方的case类似,要在执行前做解析,否则旧值得获取就只能靠手动传入。
当然,最完美的方案是把这个权利交给用户,给用户字段来配置,默认是在执行前解析。
from log-record.
作者你好,注解上的SpEL表达式执行顺序总是晚于被注解的整体方法执行的,有一种逻辑就会产生问题。 比如,有个方法是删除数据,参数只有一个ID,这种情况下需要通过id查到这条数据的信息,然后一起记录到日志。 但是现在的结果是,数据先被删除,然后SpEL函数去查数据时数据已经是null了。 看到您有个LogRecordContext的上下文,可以在方法体先查出来,但是这样子的话入侵太严重。 现在入参ID不变,不动入参,不能影响到前端。这种情况怎么处理比较好,后续会优化这种情况吗?
1.0.7 正式版本已经将解析前置到了函数执行前,之后考虑可以用户自定义前后,你可以试试了
from log-record.
@qqxx6661 嗯嗯,辛苦了!
from log-record.
美团的框架也提出了同样的ISSUE
建议:@ LogRecordAnnotation里只有函数放到整体方法执行之前执行,适应以下场景
from log-record.
v1.1.0版本支持自定义切面执行时机(方法执行前,方法执行后),默认方法执行后,可在每条注解上单独控制。
from log-record.
以下从README摘录:
在默认配置下,注解切面的逻辑在方法执行之后才会执行,这样会带来一个问题,如果在方法内部修改了方法参数,SpEL解析后取值就变成了改变后的值。
可以使用LogRecordContext写入旧值,避免这个问题,只是有一定代码侵入性。
为了满足一些特殊需求,注解中提供boolean参数executeBeforeFunc,若设置为true,则会在方法执行前先解析SpEL参数。 这样也会带来负作用,方法内写入的数值,比如自定义上下文,就不再参与SpEL解析了。
from log-record.
from log-record.
Related Issues (20)
- 传入自定义线程池 HOT 1
- @OperationLog的success参数建议 HOT 1
- 你的mac地址怎么获取的 HOT 1
- 使用mybatisplus动态表名插件和aop有冲突 HOT 1
- 支持一下作者,开源不易,我也做日志库的,作者可以帮我宣传一下吗?
- 自定义 log-record.diff-msg-format 结果错误 HOT 3
- 关于 @LogRecordDiffObject 和 @LogRecordDiffField 的一些建议 HOT 3
- 关于自定义 success、exception 和全局异常处理的顺序问题 HOT 1
- 新增常用公共函数和可序列化对象注解的建议 HOT 1
- 请教一个小问题😂 HOT 11
- @OperationLog嵌套线程上下文被清除
- Java17启动报错,改为jdk1.8就没问题 HOT 3
- 请问可以自动获取controller层的request参数吗
- Null return value from advice does not match primitive return type for: public abstract boolean cn.monitor4all.logRecord.service.IOperationLogGetService.createLog(cn.monitor4all.logRecord.bean.LogDTO) HOT 1
- 最新版本的拉不下来 log-record-core包没有上传 HOT 1
- springboot3 无法通过 maven 下载jar 包 HOT 4
- 自定义上下文空字符串影响多个@OperationLog的定义顺序 HOT 1
- 文档中描写有问题 HOT 1
- 编码文件格式问题 HOT 2
- _DIFF()时getDeclaredFields()获取不到父类字段问题 HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from log-record.