异步记录日志,主体数据回滚了怎么办

2023-04-04 15:20:21 +08:00
 NoKey

小弟有个问题请教各位大佬:

有个功能,用户在执行操作的时候,会记录日志(写表)

为了让记录日志这步不影响主体数据的执行

我们打算把日志异步记录

那么问题来了,如果执行到一定位置,主体发生异常,回滚了

怎么让异步写的日志跟着回滚呢。。。

或者有没有用的比较广泛的符合这类需求的日志系统呢?

谢谢

2585 次点击
所在节点    程序员
28 条回复
LeegoYih
2023-04-04 15:25:26 +08:00
冲正,再写一条反日志
optional
2023-04-04 15:29:15 +08:00
transaction ?
opengps
2023-04-04 15:29:35 +08:00
日志作为历史发生信息的记录,不应该跟着回滚吧,你说的日志是不是具体业务数据了?
dqzcwxb
2023-04-04 15:37:19 +08:00
@LeegoYih #1 如果反日志也异常了咋办 手动狗头
liuxu
2023-04-04 15:43:09 +08:00
日志就是日志,回滚会打一条回滚的日志
NoKey
2023-04-04 15:47:58 +08:00
@LeegoYih 比如日志记录了一个用户的操作,执行任务,暂停任务,取消任务,那么日志会有三条,如果主体那边回滚了,日志这边咋记录?跟 sql 回滚一样,一条对一条?难度有点大哟🤣
NoKey
2023-04-04 15:48:40 +08:00
@opengps 可以不跟着回滚,那需要表达哪些日志是无效的(主体回滚了)
jones2000
2023-04-04 15:56:43 +08:00
建 id 关联, 关联不上的 id 就是废日志。
abelyao
2023-04-04 16:00:24 +08:00
不回滚,记录一条 XX 执行失败的日志(不是给用户看的那种日志)
Oilybear
2023-04-04 16:32:19 +08:00
我也同意上面 opengps 老哥的说法,应该记录一条日志说上面若干无效。然后再有独立的 job 加锁冲正解锁,不然就不算日志系统了
adoal
2023-04-04 16:36:27 +08:00
@NoKey “一条对一条?难度有点大哟” 同一事务的每条操作日志里都额外记录事务 id
Nooooobycat
2023-04-04 16:43:47 +08:00
write ahead log? 写入的话就直接对文件末尾顺序写入,删除 /回滚也是写入,写入一个墓碑日志标记前一个日志失效
leeqingshui
2023-04-04 16:59:01 +08:00
异步写的日志为啥需要回滚?
这个需求好奇怪呀,不想在日志表里看出错的日志?
一般不是需要看日志中的标识字段查询请求的处理结果是否成功嘛?

正常来说:代码出错了应该会报异常,对异常做回滚处理,而在日志表一般直接是用相关标识字段来标识(比如 Is_success_flag )请求是否处理成功,比如 Is_success_flag 为 1 ,那么请求是成功的,Is_success_flag 是 0 ,那么请求是失败的(失败也可以把出错信息记录到另一字段存储)。

为啥需要回滚呢???
xiri
2023-04-04 17:02:22 +08:00
主体异常这一情况不应该也记录到日志中吗?为什么反过来是日志要回滚。
你如果要从日志追溯这一次主体的异常怎么办呢?
huajia2005
2023-04-04 17:03:50 +08:00
日志不是给用户看的,主题回滚了,肯定有一条是错误日志,真要找也是有办法的.日志回滚没必要
Wh1te
2023-04-04 17:14:28 +08:00
事务提交成功后再触发日志异步记录
tedzhou1221
2023-04-04 17:19:58 +08:00
不是业务逻辑通过后才异步记录日志吗?有点好奇啊
cryboy007
2023-04-04 17:31:09 +08:00
不应该通过事务提交事件去做嘛
zhaogaz
2023-04-04 20:39:56 +08:00
我猜一下, 我觉得可能是没定义清楚业务概念。

你说的这个记录日志,应该是一种业务数据, 不是正常意义上的一种程序输出的日志。所以你这个记录日志应该是某一个业务需求的一部分。

感觉上你这个可能是某些审计需求。

如果是我的话,根据你的描述,可能会套一个事务里面,完成之后,再发异步消息。大概这个思路。
securityCoding
2023-04-04 20:47:47 +08:00
日志为啥要回滚,记录异常日志不就好了吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/929735

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX