You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:Mongock中runAlways=true脚本无法在mongockChangeLog记录日志

Mongock runAlways=true 脚本日志记录问题

问题确认

你描述的行为是Mongock的默认执行逻辑:

  • 首次运行时,所有4个ChangeUnit都会在mongockChangeLog中生成EXECUTED记录。
  • 后续运行时,runAlways=false的脚本因已执行过,生成IGNORED的新记录;而runAlways=true的脚本即使重复执行,默认不会新增EXECUTED记录,仅更新原有记录的执行时间等字段。

配置项情况

目前Mongock没有提供可直接修改该日志行为的配置项,这是其核心执行流程的既定逻辑。

代码逻辑验证

你对io.mongock.runner.core.executor.ChangeExecutorBase第231行的判断是准确的。该行核心逻辑简化示意如下:

if ((runAlways && !changeEntryExists) || !runAlways) {
  // 写入新的mongockChangeLog记录
}

仅当runAlways=true的脚本从未执行过,或是runAlways=false的脚本时,才会生成新的日志记录;已执行过的runAlways=true脚本不会新增记录。

实现需求的方案

如果需要每次执行runAlways=true的脚本后都生成新的EXECUTED记录,可采用以下两种方式:

  • 手动写入日志:在ChangeUnit的执行代码末尾,自行向mongockChangeLog集合插入符合Mongock日志格式的记录,确保changeId、executionStatus、executionDate等字段与原生记录一致。
  • 动态生成ChangeUnit ID:为runAlways=true的脚本生成动态ID(例如拼接当前时间戳),使Mongock每次都将其视为新的ChangeUnit,从而生成新的EXECUTED记录。但此方式会导致日志集合快速增长,需评估存储成本。

内容的提问来源于stack exchange,提问作者foj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 14:15:21