mcpField
C
code-oss-logs

code-oss-logs

github.com/microsoft开发194.4k114 次安装今天更新
代码仓库

关于 code-oss-logs

用于查找和检查近期 Code OSS 或 Agents app 开发运行日志的流程指南。它按子系统说明日志文件用途,并介绍 MCP 服务和云沙盒故障的排查方法。

主要功能

  1. 01定位最近一次运行日志
  2. 02按应用子系统对应日志文件
  3. 03搜索和检查日志条目
  4. 04追踪云沙盒启动故障
  5. 05临时转发控制台输出

适用场景

  1. 01调查应用启动或崩溃问题
  2. 02诊断 MCP 服务问题
  3. 03追踪云沙盒连接故障
  4. 04检查 Agent 或终端行为

MCP 相关

帮助开发者定位并检查 MCP 网关和服务日志,包括 `mcpGateway.log` 与 `mcpServer.*.log`。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/microsoft/vscode --skill code-oss-logs

安装后在 Claude Code 中输入/code-oss-logs确认已加载。

详细介绍

Code OSS 日志

查找并显示最近一次 Code OSS 或 Agents 应用开发运行的日志。

日志根目录

应用默认用户数据目录日志路径
Code OSS$HOME/.vscode-oss-dev$HOME/.vscode-oss-dev/logs/
Agents app$HOME/.vscode-oss-dev$HOME/.vscode-oss-dev/logs/

如果启动 Code OSS 时使用了 --user-data-dir=<dir>,请改用 <dir>/logs/,而非上述默认路径。启动和调试辅助工具通常会在 .build/ 下创建临时用户数据目录;如果已知启动命令中的确切用户数据目录,请始终优先使用该目录。

每次运行都会创建一个带时间戳的文件夹,例如 20260330T163430。按修改时间排序后最新的文件夹通常就是用户关心的文件夹。

操作步骤

  1. 确定用户询问的是哪个应用:Code OSS 还是 Agents app。如果不明确,请检查两者。
  2. 找到最新的日志文件夹:
    ls -lt "$HOME/.vscode-oss-dev/logs" | head -5
    # 或用于自定义用户数据目录:
    ls -lt "<user-data-dir>/logs" | head -5
    
  3. 进入最新的文件夹并列出内容。
  4. 根据用户调查的问题读取相关日志文件。使用 tail 查看最近的条目,或使用 rg 进行筛选。

目录结构

每个带时间戳的日志文件夹都包含以下结构:

<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
多个 output_ 文件夹

每次在同一会话中重新加载窗口时,都会创建一个新的 output_<timestamp>/ 文件夹,并在 exthost/ 中创建对应的 output_logging_<timestamp>/ 文件夹。会话级别的带时间戳文件夹(例如 20260330T163430/)保持不变,但每次重新加载都会生成新的输出通道目录。时间戳最新的 output_* 文件夹包含当前或最近一次重新加载的日志。较早的文件夹包含该会话之前重新加载时的日志。

Cloud Sandbox 启动失败

从 renderer.log 开始查看。[CloudSandboxApi] 连接/重连 HTTP 失败记录状态、耗时,以及可用时的环境、会话和客户端 ID,并记录经过验证的 requestId(来自 X-GitHub-Request-Id)。使用该请求 ID 关联确切的上游 HTTP 请求;环境 ID 和会话 ID 也会贯穿重试和异步任务。缺少请求 ID 可能是因为响应头不存在,或浏览器无法访问该响应头。

通过 [WebPubSubRelayTransport] 和 [RemoteAgentHostProtocol] 跟踪返回的 clientId。中继就绪、首个发布确认、首个主机帧,以及 AHP 初始化请求/完成情况,可用于区分中继设置问题与主机响应问题。中继发布确认并不能证明主机已执行。中继关闭摘要会包含未完成的确认、主机帧/消息计数、主机静默情况,以及协议/重组错误计数;不会记录凭据或负载。这些记录属于普通日志服务输出,无需记录 AHP 负载。

按使用场景查找关键文件

调查内容……检查这些文件
应用启动 / 崩溃main.log、window1/renderer.log
扩展问题window1/exthost/exthost.log、window1/exthost/<publisher.ext>/
Copilot / Agent 问题agenthost.log、window1/exthost/GitHub.copilot-chat/
Agent 主机 IPC(Agents app)window1/output_<timestamp>/agenthost.*.log
MCP 服务问题mcpGateway.log、window1/mcpServer.*.log
终端问题terminal.log、ptyhost.log
网络 / 身份验证问题network-shared.log、window1/network.log
设置同步userDataSync.log
Agent 自定义项window1/customizationsDebug.log(Agents app)

实用命令

# Recent entries from a log file
tail -50 "<timestamp>/window1/renderer.log"

# Search all logs in a run for a probe marker or error
rg -n "MY_PROBE|error" "<timestamp>"

# Show non-empty logs in a run
find "<timestamp>" -type f -size +0 -print

临时控制台转发工作流

使用临时 console.log 探针,且需要将这些探针写入常规日志文件时,请在启动 Code OSS 前在本地启用开发控制台转发。

  1. 在 src/vs/platform/log/common/log.ts 中找到 isDevConsoleLogForwardingEnabled。
  2. 临时启用注释掉的 Boolean("true") 行:
    export const isDevConsoleLogForwardingEnabled = false
        || Boolean("true") // done "weirdly" so that a lint warning prevents you from pushing this
        ;
    
  3. 构建项目,或等待监视任务检测到更改。
  4. 启动 Code OSS 或 Agents 应用,并复现问题。
  5. 查看相关日志。
  6. 完成前,将标志恢复为默认关闭状态,并移除所有临时 console.log 探针。

Boolean("true") 这种写法会故意触发 lint 警告,以便在误启用标志时能在提交前发现。请勿在启用此标志的情况下提交代码。

提示

  • 对于源代码构建中的临时开发探针,使用 console.log 或 ILogService 均可。选择你正在修改的代码中最方便的方式即可。
  • 绝不可提交 console.log 探针。如果日志代码需要保留在产品中,请改用 ILogService。
  • 如果在源代码构建中启用了开发控制台转发,console.debug、console.error、console.info、console.log 和 console.warn 会通过进程日志服务写入常规日志文件。
  • 控制台探针会写入输出它们的进程对应的日志:主进程写入 main.log,渲染器/工作台写入 window1/renderer.log,共享进程写入 sharedprocess.log,pty 主机写入 ptyhost.log,Agent 主机写入 agenthost.log。从渲染器端观察扩展主机的控制台输出;启用转发所有扩展主机控制台输出后,输出会出现在 window1/renderer.log 中。
  • 如果未启用控制台转发,需要使用 ILogService 记录必须保留在日志文件中的探针;原生 console.log 可能只会出现在 DevTools 或 stdout 中。
  • 并非所有日志文件都有内容。许多日志文件会创建为空文件,只有在相应子系统产生输出时才会写入内容。
  • window1/ 是第一个窗口;多窗口会话还会有 window2/ 等目录。
  • 日志行的格式为:YYYY-MM-DD HH:MM:SS.mmm [level] message。

评论

支持 Markdown