[ PROMPT_NODE_24742 ]
client-logging
[ SKILL_DOCUMENTATION ]
# 客户端日志记录
> 通过上下文将日志消息发送回 MCP 客户端。
> **提示:** 本文档涵盖 **MCP 客户端日志记录**——即从您的服务器向 MCP 客户端发送消息。对于标准的服务器端日志记录(例如,写入文件、控制台),请使用 `fastmcp.utilities.logging.get_logger()` 或 Python 内置的 `logging` 模块。
服务器日志记录允许 MCP 工具将调试、信息、警告和错误消息发送回客户端。与标准 Python 日志记录不同,MCP 服务器日志记录直接将消息发送给客户端,使其在客户端的界面或日志中可见。
## 基本用法
在任何工具函数中使用上下文日志记录方法:
python
from fastmcp import FastMCP, Context
mcp = FastMCP("LoggingDemo")
@mcp.tool
async def analyze_data(data: list[float], ctx: Context) -> dict:
"""使用全面的日志记录分析数值数据。"""
await ctx.debug("Starting analysis of numerical data")
await ctx.info(f"Analyzing {len(data)} data points")
try:
if not data:
await ctx.warning("Empty data list provided")
return {"error": "Empty data list"}
result = sum(data) / len(data)
await ctx.info(f"Analysis complete, average: {result}")
return {"average": result, "count": len(data)}
except Exception as e:
await ctx.error(f"Analysis failed: {str(e)}")
raise
## 日志级别
| 级别 | 用例 |
| --------------- | --------------------------------------------------------------- |
| `ctx.debug()` | 用于诊断问题的详细执行信息 |
| `ctx.info()` | 关于正常程序执行的一般信息 |
| `ctx.warning()` | 不会阻止执行但可能存在问题的潜在情况 |
| `ctx.error()` | 可能仍允许应用程序继续运行的错误事件 |
## 结构化日志记录
所有日志记录方法都接受一个 `extra` 参数,用于向客户端发送结构化数据。这对于创建丰富、可查询的日志非常有用。
python
@mcp.tool
async def process_transaction(transaction_id: str, amount: float, ctx: Context):
await ctx.info(
f"Processing transaction {transaction_id}",
extra={
"transaction_id": transaction_id,
"amount": amount,
"currency": "USD"
}
)
## 服务器端日志
通过 `ctx.log()` 及其便捷方法发送给客户端的消息是