当前位置: 首页 > news >正文

第九章:Logging and Monitoring

Chapter 9: Logging and Monitoring


从错误处理到日志监控:如何让系统成为“智能健康监测仪”?

在上一章的错误处理中,我们已经能让系统优雅地应对各种问题。但你是否想过:如果用户报告“天气查询失败”,如何快速定位是天气API的问题还是代理配置错误?就像医生通过体检报告诊断病情一样,本章将介绍如何通过日志与监控系统记录关键信息,帮助开发者追踪问题根源。


核心问题:如何让系统自动留下“行动轨迹”?

想象你是一名侦探,需要通过线索破解案件:

  • 用户输入了什么?
  • 代理执行到哪一步出错了?
  • 天气API返回了什么数据?

日志与监控系统就像这位侦探的“线索记录本”,通过以下机制实现:
✅ 自动记录不同严重程度的信息(从调试到错误)
✅ 支持同时输出到控制台和日志文件
✅ 通过配置控制日志详细程度


核心概念分解

1. 日志级别:像警报级别一样区分信息重要性

支持五级严重程度,从低到高:

级别场景示例
DEBUG记录“正在连接天气API”这样的详细步骤
INFO显示“用户输入了‘北京天气’”等常规操作
WARNING提示“API响应超时,尝试重试”
ERROR标记“天气API返回HTTP 500错误”
CRITICAL报告“代理无法启动,系统即将退出”
2. 输出方式:同时记录到“现场笔记”和“电子档案”
  • 控制台输出:实时查看当前进程的运行状态
  • 日志文件:长期保存供后续分析(如logs/20240101.log
# 示例:记录不同级别的日志
logger.debug("正在初始化代理")          # 调试信息
logger.info("用户输入:上海天气如何?")  # 普通操作
logger.error("调用天气API失败:网络错误")  # 错误提示
3. 自定义日志格式:让记录更清晰

通过配置定义日志的“书写格式”,例如:

[2024-01-01 10:00:00] [DEBUG] [代理模块] 正在连接天气API...

如何用日志与监控解决问题?

场景:调试天气查询失败问题

步骤1:调整日志级别查看详细信息
# 运行时添加参数开启DEBUG模式
python run_mcp.py --log-level DEBUG
步骤2:观察控制台输出
[DEBUG] 正在加载天气API配置...
[DEBUG] 检测到API密钥:"xxx"
[ERROR] 调用天气API返回HTTP 403:密钥无效!
步骤3:检查日志文件

打开logs/20240101.log文件,找到完整记录:

[2024-01-01 10:00:00] [ERROR] [天气工具] API返回:{"error":"Invalid API Key"}

此时,开发者能快速定位问题:用户配置了错误的API密钥


内部实现揭秘:日志的“记录流程”

流程分解(用简单序列图演示)
用户 MCPAgent Logger 控制台 日志文件 天气API 输入"查询天气" 记录DEBUG信息"正在调用天气API" 输出调试信息 保存到logs/目录 发送请求 返回错误 记录ERROR信息"API调用失败" 显示错误提示 用户 MCPAgent Logger 控制台 日志文件 天气API
关键代码解析

1. 日志配置文件(app/config.toml片段)

[logging]
console_level = "INFO"  # 控制台显示级别
file_level = "DEBUG"    # 日志文件记录级别

2. 日志初始化代码(app/logger.py片段)

def define_log_level(print_level="INFO", logfile_level="DEBUG"):_logger.remove()_logger.add(sys.stderr, level=print_level)        # 控制台输出_logger.add("logs/app_{time}.log", level=logfile_level)  # 文件保存return _logger

3. 代理中的日志使用(run_mcp.py片段)

async def run_single_prompt(self, prompt: str) -> None:logger.info(f"收到用户请求:{prompt}")  # 记录用户输入try:response = await self.agent.run(prompt)logger.debug("成功获取代理响应")    # 调试信息except Exception as e:logger.error(f"执行失败:{str(e)}")  # 记录错误

深入理解日志与监控系统

通过本章,你已掌握:
✅ 如何通过日志级别过滤关键信息
✅ 控制台与文件的双通道输出机制
✅ 如何通过日志定位复杂问题根源


小结与展望

通过日志与监控系统,我们实现了:
✅ 全流程的系统操作追踪
✅ 开发者友好的调试信息记录
✅ 错误发生时的快速定位能力

下一章我们将探讨部署抽象,学习如何让AI系统像“变形金刚”一样适应不同环境——现在你可以尝试修改日志级别,观察不同场景下的输出效果了!

相关文章:

  • 高等数学-第七版-下册 选做记录 习题9-3
  • emqx部署
  • 有源医疗器械的安规三项
  • three.js后处理原理及源码分析
  • VUE3:封装一个评论回复组件
  • Vue基础(7)_计算属性
  • 【mysql】python+agent调用
  • Adobe Lightroom Classic v14.3.0.8 一款专业的数字摄影后期处理软件
  • 【C++QT】Item Views 项目视图控件详解
  • 第二阶段:基础加强阶段总体介绍
  • 全面解析DeepSeek算法细节(2) —— 多令牌预测(Multi Token Prediction)
  • 如何在idea中编写spark程序
  • FDA会议类型总结
  • 排序算法详解笔记(一)
  • 生物化学笔记:神经生物学概论03 脑的高保真数字信号 突触可塑性
  • jquery解决谷歌浏览器自动保存加密密码是乱码
  • 每日一题(12)TSP问题的贪心法求解
  • 深度学习篇---抽样
  • 数据库- JDBC
  • LeetCode 热题 100_最小路径和(92_64_中等_C++)(多维动态规划)
  • 呼伦贝尔市委常委、组织部长闫轶圣调任内蒙古交通集团党委副书记
  • 日韩 “打头阵”与美国贸易谈判,汽车、半导体产业忧虑重重
  • 国家发改委回应美加征关税:典型的单边主义霸凌做法
  • 大家聊中国式现代化|陶希东:打造高水平安全韧性城市,给群众看得见的安全感
  • 一张老照片里蕴含的上海文脉
  • 野猪穿过江苏电视台楼前广场,被抓捕后送往红山森林动物园