惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

美团技术团队
罗磊的独立博客
SecWiki News
SecWiki News
The Register - Security
The Register - Security
The GitHub Blog
The GitHub Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
S
Schneier on Security
IT之家
IT之家
博客园 - 聂微东
T
The Exploit Database - CXSecurity.com
Recorded Future
Recorded Future
大猫的无限游戏
大猫的无限游戏
Know Your Adversary
Know Your Adversary
Latest news
Latest news
Vercel News
Vercel News
G
GRAHAM CLULEY
D
DataBreaches.Net
D
Darknet – Hacking Tools, Hacker News & Cyber Security
S
SegmentFault 最新的问题
博客园_首页
雷峰网
雷峰网
T
Tenable Blog
Spread Privacy
Spread Privacy
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
酷 壳 – CoolShell
酷 壳 – CoolShell
Cisco Talos Blog
Cisco Talos Blog
V
Visual Studio Blog
J
Java Code Geeks
博客园 - Franky
The Cloudflare Blog
Apple Machine Learning Research
Apple Machine Learning Research
C
CERT Recently Published Vulnerability Notes
T
Threatpost
Google DeepMind News
Google DeepMind News
F
Fortinet All Blogs
P
Privacy International News Feed
T
Threat Research - Cisco Blogs
T
The Blog of Author Tim Ferriss
V
Vulnerabilities – Threatpost
Recent Announcements
Recent Announcements
Blog — PlanetScale
Blog — PlanetScale
Security Latest
Security Latest
U
Unit 42
M
MIT News - Artificial intelligence
Y
Y Combinator Blog
K
Kaspersky official blog
有赞技术团队
有赞技术团队
B
Blog
腾讯CDC

Deep Router

Hermes Agent 优化:解决GLM-5.2模型429(1305 overloaded) | Deep Router 解决微信图片加载缓慢:从DNS到OSPF路由的问题排查 | Deep Router Windows Alma 太卡? 我有特殊的使用技巧 | Deep Router 使用Pipedream同步RSS至Twitter(X.com) | Deep Router 使用Pipedream同步RSS至BlueSky | Deep Router Dae搭配AdGuard Home使用指南 | Deep Router OpenWRT IPv6防火墙规则:如何放行客户端地址及端口 | Deep Router 国内外DNS服务器推荐列表 | Deep Router 在OpenWRT上使用Neovim | Deep Router ImmoralWRT软件源分享 | Deep Router NieR Automata Ver 1.1a | Deep Router 网关互指情况下,旁路由是否需要开启upnp? | Deep Router 【Horace And Pete】百年酒馆 第一季 1080P 阿里云 | Deep Router
解决Codex Desktop高频TRACE日志写入logs_2.sqlite问题 | Deep Router
Yawatasensei · 2026-06-24 · via Deep Router

// Codex Desktop 跑着不动,磁盘灯一直在闪,一看 ~/.codex/logs_2.sqlite 被高频 TRACE 日志狂写。官方没有开关,RUST_LOG 也压不住——这篇记录我们怎么用一行 SQLite 触发器把它止住。

$ git log --oneline --stat

📁 category: 技术分享📅 updated: 2026-06-24🏷️ tags: Codex, SQLite, ChatGPT

Codex Desktop 待机不动,磁盘灯一直在闪,一看 ~/.codex/logs_2.sqlite 被高频 TRACE 日志狂写。官方没有开关,RUST_LOG 也压不住——这篇记录我们怎么用一行 SQLite 触发器把它止住。

如果此篇内容看完也不明白怎么操作,可以直接复制链接丢给Codex让他自己操作。

📝 问题是什么

Codex Desktop 默认把大量诊断日志以 TRACE 级别(最详细的级别)持续写入本地 SQLite 数据库:

日志内容包括 WebSocket 数据包、系统文件读写、底层行为等极细粒度信息。问题在于,即使 Codex 空闲或只做轻量任务,这个写入也不会停。

本机实测,主库 62.3 MB,WAL 6.16 MB。看起来不大,但实际写入频率远超文件大小能反映的程度。

📝 排查过程

1) 数据库结构

SQLite 里有一张 logs 表,字段包括 idtsleveltargetfeedback_log_bodyestimated_bytes 等十几个字段。

日志级别分布一眼就能看出问题:

级别

行数

TRACE

13,000+

INFO

7,000+

DEBUG

1,000+

WARN / ERROR

少量

TRACE 占了绝对大头。高频写入目标主要是 codex_api::sse::responsescodex_otel.log_onlycodex_otel.trace_safecodex_api::endpoint::responses_websocket 这几个模块 —— 都是 SSE 流和 WebSocket 相关的底层通信日志。

2) 60 秒静默采样

光看 SQLite 的行数不够,关键是看它空闲时还在不在写

做了 60 秒静默采样——中间不展开日志正文,只查 MAX(id) 的变化:

  • 起始 MAX(id):5,848,707
  • 60 秒后 MAX(id):5,849,631
  • 增量:924 行

约等于 15.4 行/秒。而 logs 表总行数基本不变,说明它在边写边删——单看文件大小完全会低估实际写入频率。

这就是磁盘灯一直闪的原因。

📝 为什么不能直接关掉

优先方案当然是更新 Codex。 但排查时 codex-cli 0.142.0 即使设了 RUST_LOG=warn,TRACE 写入仍然不停——说明日志级别在这个版本上不完全受环境变量控制。

官方公开文档里也没有 sqlite_logs_enabled = false 之类的稳定开关。社区 issue 里有人验证可用的临时方案是:给 SQLite 的 logs 表加一个 BEFORE INSERT 触发器,直接拦截 TRACE 级别的写入。

这不是根治,但能立刻止住高频写盘。

📝 修复方案:一行触发器

核心就一条 SQL:

RAISE(IGNORE) 的效果是:当插入的行 level = 'TRACE' 时,直接丢弃这条记录,不写入。DEBUG / INFO / WARN / ERROR 全部正常通过。

完整 PowerShell 脚本

保存为 fix-codex-trace-logs.ps1

脚本做了五件事:

  1. 备份原始数据库三个文件(主库 + WAL + SHM)
  1. 写入触发器,拦截后续所有 TRACE 级别写入
  1. 删除已有的 13,690 条 TRACE 旧记录
  1. VACUUM 压缩数据库
  1. WAL checkpoint 截断 WAL 文件

运行方式:

建议先退出 Codex Desktop 再运行。 运行完再打开。

📝 修复效果

写入频率对比

修复前,60 秒静默采样新增 924 行,全是 TRACE。修复后再次 60 秒采样:

级别

60s 新增

DEBUG

103

INFO

56

WARN

5

TRACE

0

TRACE 彻底归零。总写入量从 924 行/分钟降到 164 行/分钟,降了 82%

文件大小对比

文件

修复前

修复后

主库

62.3 MB

18.8 MB

WAL

6.16 MB

0

清理掉 13,690 条 TRACE 记录后,主库体积降了 70%,WAL 直接清零。

📝 恢复默认行为

如果以后 Codex 官方彻底修好了,删掉触发器就能恢复默认日志行为:

🤗 注意事项

这是临时缓解,不是官方根治。 触发器会阻止 TRACE 级别诊断日志写入,但保留 DEBUG 及以上。如果需要给官方提 issue 附诊断信息,运行前先停掉触发器,或者直接用修复前的备份。

logs_2.sqlite 是诊断日志库,不是 Codex 会话正文存储。删掉 TRACE 不影响对话历史。

feedback_log_body 字段里可能包含你的私密上下文——往 issue 里贴内容前务必检查脱敏。

核心思路其实很通用: 任何用 SQLite 做日志后端的本地应用,如果日志级别不可控、写入太激进,都可以用 BEFORE INSERT 触发器做行级过滤。不碰源码、不碰配置文件,代价就是以后升级要记得删触发器。

📎 参考内容