导航菜单

  • 1.什么是MCP
  • 2.架构概览
  • 3.理解MCP服务器
  • 4.理解MCP客户端
  • 5.版本控制
  • 6.连接本地MCP服务器
  • 7.连接远程MCP服务器
  • 8.构建MCP服务器
  • 9.构建MCP客户端
  • 10.SDKs
  • 11.理解MCP中的授权
  • 12.安全最佳实践
  • 13.MCP Inspector
  • 14.规范
  • 15.关键变更
  • 16.架构
  • 17.基础协议概述
  • 18.生命周期
  • 19.传输
  • 20.授权
  • 21.取消
  • 22.Ping
  • 23.进度
  • 24.任务
  • 25.根
  • 26.采样
  • 27.引导
  • 29.提示
  • 30.资源
  • 31.工具
  • 32.补全
  • 33.日志
  • 34.分页
  • 35.模式参考
  • Keycloak
  • 28.服务器功能
  • 1. 什么是日志?
  • 2. 本章你将学到
  • 3. 典型流程
  • 4. 能力
  • 5. 日志级别
  • 6. 协议消息
    • 6.1 设置日志级别(logging/setLevel)
    • 6.2 日志消息通知(notifications/message)
  • 7. 流程示意
  • 8. 错误处理
  • 9. 实现建议
  • 10. 安全要点

1. 什么是日志? #

日志(Logging)是 MCP 服务器向客户端发送结构化日志消息的标准化方式。客户端可设置最低日志级别,服务器只发送该级别及以上的日志,便于调试、排错和监控。

协议版本:2025-11-25

通俗理解 说明
服务器 → 客户端 服务器主动推送日志,客户端展示或持久化
可过滤 客户端设 info 则只收 info/warning/error 等,不收 debug
结构化 含级别、记录器名、可 JSON 序列化的 data

2. 本章你将学到 #

  • 日志的能力声明与协议消息
  • 如何设置日志级别、接收日志通知
  • 日志级别含义与示例
  • 错误处理、实现建议与安全要点

3. 典型流程 #

客户端连接服务器后,发送 logging/setLevel 将级别设为 info → 服务器执行操作时,通过 notifications/message 推送 info、warning、error 等日志 → 客户端在控制台或 UI 中展示。若用户只需关注错误,可将级别改为 error,服务器仅发送 error 及以上级别。

4. 能力 #

服务器必须声明 logging 能力:

{
  "capabilities": {
    "logging": {}
  }
}

5. 日志级别 #

遵循 RFC 5424 标准 syslog 严重级别,从低到高:

级别 说明 示例
debug 详细调试信息 函数入口/出口、变量值
info 一般信息 操作进度、连接成功
notice 正常但重要 配置变更
warning 警告 已弃用功能、重试
error 错误 操作失败、API 超时
critical 严重 组件故障
alert 需立即处理 数据损坏
emergency 系统不可用 完全故障

6. 协议消息 #

6.1 设置日志级别(logging/setLevel) #

客户端可以发送此请求,控制接收哪些级别的日志:

请求:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "logging/setLevel",
  "params": { "level": "info" }
}

响应:

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {}
}

6.2 日志消息通知(notifications/message) #

服务器通过通知推送日志,客户端不需回复:

示例:error 级别

{
  "jsonrpc": "2.0",
  "method": "notifications/message",
  "params": {
    "level": "error",
    "logger": "database",
    "data": {
      "error": "Connection failed",
      "details": { "host": "localhost", "port": 5432 }
    }
  }
}

示例:info 级别

{
  "jsonrpc": "2.0",
  "method": "notifications/message",
  "params": {
    "level": "info",
    "logger": "tools",
    "data": {
      "message": "Tool get_weather called",
      "args": { "location": "Paris" }
    }
  }
}

示例:debug 级别(仅当客户端设 debug 时收到)

{
  "jsonrpc": "2.0",
  "method": "notifications/message",
  "params": {
    "level": "debug",
    "logger": "parser",
    "data": { "step": "parse_input", "raw": "..." }
  }
}
字段 说明
level 日志级别
logger 可选,记录器名称(如 database、tools)
data 可选,任意可 JSON 序列化的结构化数据

7. 流程示意 #

sequenceDiagram participant C as 客户端 participant S as 服务器 C->>S: logging/setLevel (info) S-->>C: result: {} S-->>C: notifications/message (info) S-->>C: notifications/message (warning) S-->>C: notifications/message (error) C->>S: logging/setLevel (error) S-->>C: result: {} Note over S: 此后仅发送 error 及以上

8. 错误处理 #

错误码 情况
-32602 无效的日志级别

示例:

{
  "jsonrpc": "2.0",
  "id": 1,
  "error": {
    "code": -32602,
    "message": "Invalid log level: invalid_level"
  }
}

9. 实现建议 #

角色 建议
服务器 速率限制;在 data 中包含相关上下文;使用一致的 logger 名称;移除敏感信息
客户端 在 UI 展示;实现过滤/搜索;按级别区分显示(颜色);持久化日志

10. 安全要点 #

禁止 说明
凭据/密钥 日志不得包含密码、API Key 等
个人身份信息 不得包含 PII
内部细节 不得暴露可能助长攻击的系统信息
建议 说明
速率限制 对日志消息实施限制
验证数据 验证所有 data 字段
访问控制 控制谁能查看日志
监控 监控敏感内容泄露
← 上一节 32.补全 下一节 34.分页 →

访问验证

请输入访问令牌

Token不正确,请重新输入