Python日志五级需严格按语义使用:debug用于开发调试细节,info记录正常运行关键节点,warning提示潜在风险,error表示可恢复的操作失败,critical标志服务不可用。

Python 日志分级不是随便设几个 level 就完事,关键在 debug/info/warning/error/critical 这五级怎么用才不混乱、不遗漏、不误判。核心原则是:每级有明确语义,不同场景对应不同级别,且要配合 handler 和 formatter 才真正生效。
debug 级别:只给开发者看的“显微镜”
debug 是最低级别,用于输出详细执行路径、变量快照、函数入参/返回值等临时诊断信息。生产环境默认关闭,开发或调试时开启。
- 适合写:f"进入函数 {func_name},参数为 {args}"、f"数据库查询耗时 {elapsed:.2f}s"
- 不适合写:"用户登录失败"(这是 error)、"配置加载完成"(这是 info)
- 启用方式:
logging.basicConfig(level=logging.DEBUG)或在 logger 上调用setLevel(logging.DEBUG)
info 级别:系统正常运行的“记事本”
info 表示程序按预期工作的重要节点,是运维和业务方最常查看的级别。它不反映问题,但能回答“发生了什么”“走到哪一步了”。
- 适合写:"服务启动成功,监听 0.0.0.0:8000"、"订单 #12345 已创建并写入数据库"
- 避免泛滥:"进入 for 循环" 或每行都 log,会淹没关键信息
- 建议搭配结构化字段:
logger.info("user_registered", user_id=uid, ip=request.ip)(需用支持结构化的 handler,如 json logging)
warning 级别:潜在风险的“黄灯”
warning 不代表错误,而是提示“可能出问题,但当前还能继续”。它常被低估,其实是最该主动设计的一级——帮团队提前发现隐患。
立即学习“Python免费学习笔记(深入)”;
- 典型场景:配置项缺失但用了默认值、API 返回了非 2xx 状态码但已重试成功、缓存命中率低于 80%
- 不要降级为 info:"找不到配置文件,使用默认配置" → 应为 warning
- 可触发告警:warning 出现频率超过阈值时,自动发钉钉/邮件
error 和 critical:必须响应的“红灯”
error 表示一个操作失败,但程序整体仍可运行(如单次支付请求超时);critical 表示整个服务已无法履行核心职责(如数据库连接全部断开、配置加载失败导致主逻辑不可用)。
- error 示例:"调用第三方短信接口失败,HTTP 503"、"解析 JSON 失败,原始内容: {raw_data}"
- critical 示例:"初始化 Redis 客户端失败,退出主进程"、"JWT 密钥未配置,鉴权模块失效"
- 关键区别:critical 通常伴随 exit() 或 panic 流程,error 则应有 fallback 或重试机制










