qqxx6661 / log-record

使用注解优雅记录系统日志,操作日志,后端埋点等,支持SpEL表达式,自定义上下文,自定义函数,实体类DIFF等其他高阶处理。
Apache License 2.0
925 stars 173 forks source link

_DIFF对于对象/对象数组的msg输出 #74

Open zyd100 opened 1 year ago

zyd100 commented 1 year ago

diff函数内,我看作者大大在msg输出时是直接调用 old/newValue.toString()。请问能否支持通过注解别名优化一下输出。

例子:【列表A】从【[TestDiffJob(jobId=22, jobName=222, dutyList=[TestDiffDuty(dutyId=222, dutyName=222)])]】 改为 【列表A】从【[实体A(编号=22, 名字=222, 列表A=[实体B(编号=222, 名=222)])]】

原输出虽然开发人员能够明白,但对于业务人员的查看并不友好

以上效果虽然可以直接通过覆写toString实现,但不算是一个太好的方案,容易干扰用到toString的相关代码。

qqxx6661 commented 1 year ago

现在其实在DIFF的对象上是支持别名的,你可以看下文档的实体类Diff哪里,比如@LogRecordDiffField加alias

public class TestUser {
    @LogRecordDiffField(alias = "用户工号")
    private Integer id;
    private String name;
}

效果就是:

"msg":"【用户工号】从【1】变成了【2】 【name】从【张三】变成了【李四】"

不过现在DIFF类里如果嵌套了别的类(我看你例子里就是这种情况)还不能支持这样的别名,因为目前的DIFF实现不能拿到嵌套类的别名。

由于嵌套类现在是依赖转为JSON对比,所以读取别名较为困难,除非换一种DIFF实现,自己来遍历所有嵌套,这个我还在摸索比较好的实现。

临时解决方案就是使用的时候尽量避免DIFF的类里有嵌套类,也就是说直接DIFF更加具体的,只有一层字段的类。