日誌記錄
協議版本: 2024-11-05
模型上下文協議(MCP)為服務器提供了一種標準化方式,用於向客戶端發送結構化日誌消息。客戶端可以通過設置最低日誌級別來控制日誌詳細程度,服務器則發送包含嚴重性級別、可選的記錄器名稱和任意JSON可序列化數據的通知。
用戶交互模型
實現可以通過任何適合其需求的界面模式來展示日誌記錄功能——協議本身不強制要求任何特定的用戶交互模型。
能力
發送日誌消息通知的服務器必須聲明logging能力:
{
"capabilities": {
"logging": {}
}
}日誌級別
協議遵循RFC 5424中指定的標準syslog嚴重性級別:
| 級別 | 描述 | 使用場景示例 |
|---|---|---|
| debug | 詳細的調試信息 | 函數進入/退出點 |
| info | 一般信息性消息 | 操作進度更新 |
| notice | 正常但重要的事件 | 配置更改 |
| warning | 警告條件 | 已棄用功能的使用 |
| error | 錯誤條件 | 操作失敗 |
| critical | 嚴重條件 | 系統組件故障 |
| alert | 必須立即採取行動 | 檢測到數據損壞 |
| emergency | 系統不可用 | 完全系統故障 |
協議消息
設置日誌級別
要配置最低日誌級別,客戶端可以發送logging/setLevel請求:
請求:
{
"jsonrpc": "2.0",
"id": 1,
"method": "logging/setLevel",
"params": {
"level": "info"
}
}日誌消息通知
服務器使用notifications/message通知發送日誌消息:
{
"jsonrpc": "2.0",
"method": "notifications/message",
"params": {
"level": "error",
"logger": "database",
"data": {
"error": "Connection failed",
"details": {
"host": "localhost",
"port": 5432
}
}
}
}消息流
sequenceDiagram
participant Client
participant Server
Note over Client,Server: 配置日誌記錄
Client->>Server: logging/setLevel (info)
Server-->>Client: 空結果
Note over Client,Server: 服務器活動
Server--)Client: notifications/message (info)
Server--)Client: notifications/message (warning)
Server--)Client: notifications/message (error)
Note over Client,Server: 級別變更
Client->>Server: logging/setLevel (error)
Server-->>Client: 空結果
Note over Server: 僅發送error級別<br/>及以上
錯誤處理
服務器應該為常見故障情況返回標準JSON-RPC錯誤:
- 無效的日誌級別:
-32602(無效參數) - 配置錯誤:
-32603(內部錯誤)
實現考慮因素
服務器應該:
- 對日誌消息進行速率限制
- 在數據字段中包含相關上下文
- 使用一致的記錄器名稱
- 移除敏感信息
客戶端可以:
- 在UI中呈現日誌消息
- 實現日誌過濾/搜索
- 以視覺方式顯示嚴重性
- 持久化日誌消息
安全性
日誌消息不得包含:
- 憑證或密鑰
- 個人身份信息
- 可能幫助攻擊的內部系統詳細信息
實現應該:
- 對消息進行速率限制
- 驗證所有數據字段
- 控制日誌訪問
- 監控敏感內容