EasyGlobe EasyGlobe

Codex 0.142.0 修复 SQLite 日志狂写:升级与清理指南

作者:EasyGlobe 中文团队 阅读约 2 分钟 AI

本文摘要

Codex 0.142.0 已降低 SQLite 持久日志的异常写入。本文说明如何升级、验证 logs_2.sqlite 是否恢复正常、清理旧空间,并撤销临时触发器绕过方案。

Vaibhav Srivastav 确认 Codex 最新版本修复 SQLite 日志问题的截图
EasyGlobe 中文团队

EasyGlobe 中文团队

全球增长团队

世界很大,但在 Easyglobe 眼中,它就在你的脚下。我们创立 Easyglobe 的初衷很简单:打破互联网的界限,让每一个产品的发布都回归纯粹。在这个快节奏的时代,我们拒绝繁琐与沉重,致力于为全球探索者提供轻量化、高品质的海外增长解决方案。

如果你之前遇到 ~/.codex/logs_2.sqlite 或 WAL 文件持续增长,Codex 0.142.0 是应该优先安装的版本。OpenAI 于 2026 年 6 月 22 日发布该版本,Release 说明中明确提到减少持久日志 churn,包括移除逐 WebSocket payload 日志、过滤重复 telemetry 记录。

我的建议是先升级,再清理旧数据库。新版本修的是后续写入行为,但不会自动把已经膨胀的 SQLite 文件缩小。

如果你还想看更多 AI 工具和增长运营文章,可以浏览 EasyGlobe 博客。本文只聚焦 Codex SQLite 日志修复,以及升级后的清理步骤。

Codex CLI 终端中的 SQLite 日志修复与升级检查清单
先升级,再确认 logs_2.sqlite 不再快速增长。

Codex 0.142.0 到底改了什么?

官方 Codex 0.142.0 Release 把相关变更归在 reduced persistent-log churn。这个版本还包含启动和会话延迟优化、可配置 rollout token budget、索引 web 搜索模式,以及 multi-agent delegation 配置。

和本问题直接相关的是两个已合并 PR:PR #29432 停止记录每个成功的 Responses WebSocket 事件;PR #29457 过滤 SQLite 持久日志里的高噪声 target,包括依赖日志和重复的 OpenTelemetry mirror 事件。

所以更准确的说法是:0.142.0 修复了导致异常 churn 的高频日志来源,而不是承诺 Codex 从此完全不写本地日志。

哪些用户应该升级?

  • Codex 版本低于 0.142.0 的用户。
  • 曾经看到 logs_2.sqlite 或 logs_2.sqlite-wal 快速增长的用户。
  • 曾经用 SQLite trigger 拦截日志写入的用户。
  • 同时使用 Codex CLI、桌面客户端或编辑器插件,且担心磁盘写入的用户。

如何检查当前 Codex 版本

在终端运行:

codex --version

如果低于 0.142.0,就需要升级。如果你之前用过多个安装方式,还要确认 shell 实际调用的是哪个 codex。

which codex

如何升级 Codex CLI

以下命令来自 Codex 官方 README。选择和你当前安装方式一致的命令即可。

macOS 或 Linux 安装脚本

curl -fsSL https://chatgpt.com/codex/install.sh | sh

npm 安装

npm install -g @openai/codex@latest

Homebrew cask

brew upgrade --cask codex

升级后再次确认版本:

codex --version

如何验证 SQLite 日志是否恢复正常

先看文件大小:

ls -lh ~/.codex/logs_2.sqlite ~/.codex/logs_2.sqlite-wal ~/.codex/logs_2.sqlite-shm 2>/dev/null

再看日志级别分布:

sqlite3 ~/.codex/logs_2.sqlite "SELECT level, COUNT(*) FROM logs GROUP BY level ORDER BY COUNT(*) DESC;"

最后观察 15 秒内行数变化:

sqlite3 ~/.codex/logs_2.sqlite "SELECT COUNT(*) FROM logs"; sleep 15; sqlite3 ~/.codex/logs_2.sqlite "SELECT COUNT(*) FROM logs";

少量变化不一定异常。真正值得警惕的是几秒内插入成千上万行,但保留行数几乎不变,这通常意味着持续 insert-and-prune。

升级 Codex 并检查 SQLite 日志增长的工作流
推荐顺序:查版本、升级、测写入、清理空间、再撤销临时绕过。

如何清理旧的 Codex SQLite 占用空间

升级只影响未来写入,旧数据库页和 WAL 仍可能占用空间。建议先退出 Codex,再执行:

sqlite3 ~/.codex/logs_2.sqlite "PRAGMA wal_checkpoint(TRUNCATE); VACUUM; PRAGMA wal_checkpoint(TRUNCATE);"

如果你不需要保留旧调试日志,可以先清空日志行,再回收空间:

sqlite3 ~/.codex/logs_2.sqlite "DELETE FROM logs; PRAGMA wal_checkpoint(TRUNCATE); VACUUM; PRAGMA wal_checkpoint(TRUNCATE);"

这只删除本地调试日志,不会删除你的 Codex 对话或项目文件。

之前加过 trigger,还要保留吗?

如果你之前创建过 block_log_inserts 触发器,建议升级并验证后再删除。确认日志行数不再快速增长后,可以恢复正常日志能力。

sqlite3 ~/.codex/logs_2.sqlite "DROP TRIGGER IF EXISTS block_log_inserts;"

删除后重新跑 15 秒行数测试。如果只少量变化,说明临时绕过基本可以撤销。

FAQ

Codex 0.142.0 会完全停止 SQLite 写入吗?

不会。它降低的是导致异常 churn 的噪声持久日志。正常本地日志仍可能存在。

升级后 logs_2.sqlite 会自动变小吗?

不会。文件已经变大时,需要手动 VACUUM 才能回收空间。

删除 logs_2.sqlite 里的旧日志安全吗?

对普通用户通常是安全的。这些是本地调试日志,不是主要对话存储。除非你要保留 bug 证据,否则可以清理。