可搜索的结构化日志
输出带请求关联信息的 JSON 日志。
可搜索的结构化日志 是 CoddyKit 上的免费 MCP Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 MCP Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 MCP Academy 课程共包含 4 节课。
本课时的部分内容尚未翻译,以英文显示。
Logs You Can Actually Use
Plain text logs read fine to a human but fight you at scale. Structured logs store each event as data, so machines can filter and search them fast. 🔎
Why JSON Wins
Emit each log line as a JSON object. Every field becomes searchable, so you can query by tool, status, or duration without fragile text parsing.
Anatomy of a Log Event
A good event carries a timestamp, a level, a message, and context fields. Together they tell you what happened, when, and why.
{"ts": "2026-01-01T10:00:00Z",
"level": "info",
"msg": "tool called",
"tool": "search"}Pick Sensible Levels
Use log levels with intent: debug for detail, info for normal flow, warning for trouble, error for failures. Levels let you turn noise up or down.
The Correlation ID
Give each request a unique correlation ID and stamp it on every log it produces. Now one search pulls the full story of a single call.
Generate an ID
A UUID makes a fine correlation ID: it is unique enough to never collide across requests.
import uuid
request_id = str(uuid.uuid4())
print(request_id)Log to stderr, Not stdout
Over stdio, stdout carries the MCP protocol itself. Always send logs to stderr so they never corrupt the JSON-RPC messages.
Python's logging Module
Python's built-in logging module gives you levels and handlers for free. Point a handler at stderr and you are halfway there.
import logging, sys
logging.basicConfig(stream=sys.stderr,
level=logging.INFO)
log = logging.getLogger("mcp")Add Fields, Not Strings
Resist stuffing values into the message text. Pass them as extra fields so each one stays its own searchable column later.
log.info("tool finished",
extra={"tool": "search",
"ms": 42})Never Log Secrets
Logs travel and persist, so redact tokens, keys, and personal data before writing them. A leaked secret in a log is a real breach. 🔒
Keep One Line Per Event
Write one JSON object per line. This line-delimited format is what log shippers and search tools expect to ingest cleanly.
Quick Check
One detail trips up many MCP authors.
Recap
You learned to log as searchable JSON: one event per line, useful levels, a correlation ID, redacted secrets, and output on stderr. 📋
常见问题解答
「可搜索的结构化日志」课时是免费的吗?
是的 — 「可搜索的结构化日志」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 MCP Academy 课程的其余内容,请升级到 CoddyKit PRO。 MCP Academy 课程共包含 4 节课。
「可搜索的结构化日志」这节课中我会学到什么?
输出带请求关联信息的 JSON 日志。 你通过在浏览器中直接运行的动手代码来练习 MCP Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 MCP Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 MCP Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「可搜索的结构化日志」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 MCP Academy 课中编写并运行代码吗?
能。每节 MCP Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 服务器中需要测量什么
- 可搜索的结构化日志
- 端到端追踪工具调用
- 针对失败与滥用发出警报