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

推荐订阅源

阮一峰的网络日志
阮一峰的网络日志
D
Darknet – Hacking Tools, Hacker News & Cyber Security
S
Schneier on Security
The Last Watchdog
The Last Watchdog
Cyberwarzone
Cyberwarzone
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Cyber Attacks, Cyber Crime and Cyber Security
L
Lohrmann on Cybersecurity
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
The Cloudflare Blog
V
V2EX
博客园_首页
博客园 - 聂微东
Vercel News
Vercel News
人人都是产品经理
人人都是产品经理
G
GRAHAM CLULEY
T
Tenable Blog
Last Week in AI
Last Week in AI
Y
Y Combinator Blog
L
LINUX DO - 最新话题
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
SecWiki News
SecWiki News
博客园 - 三生石上(FineUI控件)
S
Secure Thoughts
N
News | PayPal Newsroom
T
The Blog of Author Tim Ferriss
The GitHub Blog
The GitHub Blog
T
Troy Hunt's Blog
博客园 - 【当耐特】
Forbes - Security
Forbes - Security
H
Hacker News: Front Page
A
About on SuperTechFans
B
Blog RSS Feed
Engineering at Meta
Engineering at Meta
MongoDB | Blog
MongoDB | Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
罗磊的独立博客
D
DataBreaches.Net
P
Privacy & Cybersecurity Law Blog
Schneier on Security
Schneier on Security
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Google DeepMind News
Google DeepMind News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Jina AI
Jina AI
D
Docker
P
Proofpoint News Feed

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 触发器做行级过滤。不碰源码、不碰配置文件,代价就是以后升级要记得删触发器。

📎 参考内容