如何读取 VS Code(Code - OSS)开发构建的日志目录定位问题
如何读取 VS CodeCode - OSS开发构建的日志目录定位问题【免费下载链接】vscodeVisual Studio Code项目地址: https://gitcode.com/GitHub_Trending/vscode6/vscode在 Code - OSS 的源码开发构建dev build中调试时主进程、渲染进程、扩展宿主、Agent 宿主等各进程都会把运行日志写入本地用户数据目录。当窗口启动异常、扩展报错、终端或网络出现问题时第一手信息就藏在这些日志文件里。本文说明如何找到开发构建的日志根目录、定位最近一次运行的时间戳目录并按问题类型读取对应日志文件完成一次可复现的问题定位。适用前提你运行的是从源码启动的开发构建而非正式发布的 VS Code 产品包运行方式沿用项目内文档的说明见 .github/skills/code-oss-logs/SKILL.md。先确认日志根目录在哪开发构建的用户数据目录默认是$HOME/.vscode-oss-dev日志根目录即$HOME/.vscode-oss-dev/logs/这个目录名不是凭空来的。仓库的 product.json 中定义了dataFolderName: .vscode-oss而 src/vs/platform/product/common/product.ts 中有一段“从源码运行”Running out of sources的逻辑当环境变量VSCODE_DEV存在时产品配置会被改写为dataFolderName: \${product.dataFolderName}-dev也就是在原名后追加-dev最终得到.vscode-oss-dev。两种情况下目录会不同读日志前先确认你用的是哪一个如果你用--user-data-dirdir启动了 Code OSS日志根目录改为dir/logs/。dir是你启动命令里实际传入的目录路径。启动/调试辅助脚本经常会在.build/下创建临时用户数据目录。项目内文档明确提示当你能从启动命令里确认实际使用的用户数据目录时优先使用那个精确目录而不是默认目录。找到最近一次运行的时间戳目录每次运行会创建形如20260330T163430的时间戳文件夹上面是文档示例实际以你机器上出现的时间为准。按修改时间排序通常最新的就是当前要排查的那一次ls -lt $HOME/.vscode-oss-dev/logs | head -5若使用了自定义用户数据目录把路径替换为实际目录ls -lt user-data-dir/logs | head -5这里user-data-dir是你启动命令中通过--user-data-dir指定的那个目录。进入最新的时间戳目录并列出内容ls -lt $HOME/.vscode-oss-dev/logs/20260330T163430按问题类型选择要读的日志文件每个时间戳目录的日志文件布局是固定的。项目内文档给出的结构如下方括号注释为文档原文对各文件的用途说明timestamp/ ├── main.log # Electron main process (app lifecycle, window management) ├── agenthost.log # Agent host process (Copilot agent, model listing, agent sessions) ├── mcpGateway.log # MCP gateway/server coordination ├── sharedprocess.log # Shared process (extensions gallery, global services) ├── telemetry.log # Telemetry events ├── terminal.log # Terminal/pty activity ├── ptyhost.log # Pty host process ├── network-shared.log # Shared network activity ├── editSessions.log # Edit sessions / cloud changes ├── userDataSync.log # Settings sync ├── remoteTunnelService.log # Remote tunnel service │ └── window1/ # Per-window logs (window1, window2, etc.) ├── renderer.log # Renderer process (workbench UI, services, startup) ├── network.log # Per-window network activity ├── views.log # View/panel activity ├── notebook.rendering.log # Notebook rendering ├── customizationsDebug.log # Agent customizations debug info (Agents app) ├── mcpServer.*.log # Per-MCP-server logs (one file per configured server) │ ├── exthost/ # Extension host logs │ ├── exthost.log # Extension host main log (activation, errors) │ ├── extHostTelemetry.log │ ├── publisher.extension/ # Per-extension log folders │ │ └── extension.log │ └── output_logging_timestamp/ # Extension output channels │ └── output_timestamp/ # Output channel logs (workbench side) ├── tasks.log # Tasks output ├── agentSessionsOutput.log # Agent sessions output (Agents app) └── agenthost.clientId.log # Agent host IPC traffic when tracing is enabled排查时按下表选文件该表来自项目内文档的 Key Files by Use Case排查目标查看的文件应用启动 / 崩溃main.log、window1/renderer.log扩展问题window1/exthost/exthost.log、window1/exthost/publisher.ext/Copilot / agent 问题agenthost.log、window1/exthost/GitHub.copilot-chat/Agent host IPCAgents appwindow1/output_timestamp/agenthost.*.logMCP 服务器问题mcpGateway.log、window1/mcpServer.*.log终端问题terminal.log、ptyhost.log网络 / 认证问题network-shared.log、window1/network.log设置同步userDataSync.logAgent 自定义window1/customizationsDebug.logAgents app其中publisher.ext是“发布者.扩展名”形式的目录名如GitHub.copilot-chatclientId是 agent host IPC 日志中的客户端标识。多窗口会话时第二个窗口对应window2/以此类推window1/是第一个窗口。读取、检索与确认可读内容选定文件后用tail看最近的条目用rg在整个运行目录内检索关键词或错误# 查看某个日志文件的最近 50 行timestamp 替换为实际时间戳目录名 tail -50 timestamp/window1/renderer.log # 在整个运行目录中检索标记串或错误 rg -n MY_PROBE|error timestamp # 列出该次运行中非空的日志文件 find timestamp -type f -size 0 -print三条使用边界都来自项目内文档不是所有日志文件都有内容。很多文件创建时是空的只有对应子系统产生输出时才会被写入因此“文件不存在”不代表运行异常用上面的find命令先确认可读文件更直接。日志行格式为YYYY-MM-DD HH:MM:SS.mmm [level] message可按时间戳与日志级别过滤。验证读对了目录时间戳目录名应与本次启动时间吻合按修改时间排序最新且window1/下的文件随你最近的操作更新。若目录名与启动时间对不上多半是启动时用了--user-data-dir或临时目录回到第一步重新确认根目录。窗口重载后的output_目录说明同一次会话内每次窗口重载reload都会新建一个output_timestamp/目录并在exthost/下创建对应的output_logging_timestamp/。会话级的时间戳目录如20260330T163430/保持不变。因此要读当前或最近一次重载的输出通道日志选时间戳最新的那个output_*目录更早的output_*目录保存的是同一会话内更早重载的日志。可选分支让临时 console.log 探针写入日志文件如果你在源码里加了临时console.log探针默认情况下这些输出可能只出现在 DevTools 或 stdout 里。要让它持久化到上述日志文件需要临时开启开发构建的 console 转发开关打开 src/vs/platform/log/common/log.ts找到isDevConsoleLogForwardingEnabled。当前源码中该标志为export const isDevConsoleLogForwardingEnabled false // || Boolean(true) // done weirdly so that a lint warning prevents you from pushing this ;临时把注释掉的Boolean(true)行启用改为export const isDevConsoleLogForwardingEnabled false || Boolean(true);。项目内文档强调这种“别扭”的写法是故意设计让 lint 警告阻止该标志被提交不要把启用状态的标志提交进仓库。重新构建或让 watch 任务拾取改动。启动 Code OSS或 Agents app并复现问题。按前文的目录结构读取相应日志。收尾时把标志恢复为默认关闭状态并删除所有临时console.log探针。开启转发后console.debug、console.error、console.info、console.log、console.warn会经由进程日志服务写入常规日志文件探针落在其所在进程的日志中主进程在main.log渲染/workbench 在window1/renderer.log共享进程在sharedprocess.logpty host 在ptyhost.logagent host 在agenthost.log。若未开启转发需要持久化到日志文件的探针应改用ILogService而不是原生console.log。限制与下一步本文路径仅适用于源码运行的开发构建-dev后缀目录来自VSCODE_DEV环境下的产品配置改写见 src/vs/platform/product/common/product.ts发布构建的目录名以各自产品的dataFolderName为准。若排查的是 Agent Host 调试日志导出包Export Agent Host Debug Logs 生成的 bundle项目内另有专门的检索技能 agent-host-logs不属于本文的开发构建日志路径。完成排查后的正常状态临时开关已恢复关闭、探针已删除、结论以对应日志文件中的实际记录为准。【免费下载链接】vscodeVisual Studio Code项目地址: https://gitcode.com/GitHub_Trending/vscode6/vscode创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →