必须先执行codex --verbose启用verbose日志模式,再用vs code正则将console.log(…)替换为logger.info(…),接着按场景选用debug/trace/error方法,最后注入全局logger并用child绑定模块上下文。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

在Mac版Codex项目中统一替换分散的console.log为结构化Logger调用,避免调试日志污染生产环境、丢失上下文信息、无法按模块过滤,必须确保所有日志具备时间戳、模块名、级别标识和可上报字段。
第一步:确认Codex项目已启用Verbose日志模式
打开终端,进入项目根目录,执行:
codex --verbose bash
该命令强制启动最高级别日志输出,覆盖配置文件中的日志设置。若未启用,后续所有Logger替换将无法被Codex SessionLogger捕获。
【必须先执行这一步,否则后续替换的日志不会写入session-*.jsonl文件】
第二步:用VS Code正则批量替换console.log为logger.info
按下Cmd+Shift+H打开全局替换面板,点击右端“.*”图标启用正则模式。
搜索框输入:console\.log$$([^)]*)$$;
替换框输入:logger.info($1);
点击“全部替换”。
这个正则表达式能精准匹配带分号结尾的console.log(…);语句,并通过$1保留括号内全部内容,避免误伤console.log嵌套调用或字符串内出现的console.log字面量。
注意:如果项目中存在console.log后无分号(如ES6模块顶层语句),需额外运行一次搜索:console\.log$$([^)]*)$$\n,替换为logger.info();\n。
第三步:为不同日志级别选择对应方法
方法一:调试类输出 → 改用console.debug
仅在开发环境生效,且默认不显示在控制台,适合临时埋点。
方法二:关键流程节点 → 改用logger.trace
需确保logger实例已注入trace方法,否则会报undefined is not a function错误。
方法三:错误与异常 → 必须用logger.error并携带error.stack
例如:logger.error('API fetch failed', { error: err, stack: err.stack });
不拼接err.stack会导致线上故障无法定位原始调用栈。
第四步:注入全局logger实例并绑定模块上下文
第一步:在src/main.ts顶部添加:import { createLogger } from '@codex/core/logger';
第二步:初始化logger:const logger = createLogger({ module: 'main' });
第三步:挂载到全局:(globalThis as any).logger = logger;
第四步:在各业务模块开头统一声明模块名:const logger = (globalThis as any).logger.child({ module: 'auth-service' });
child方法生成的新实例会自动继承父logger配置,并叠加module字段,使日志可按模块精确筛选。











