Python日志级别是按严重程度和用途分层的信息分类工具:DEBUG用于开发调试细节,INFO记录关键运行节点,WARNING提示异常苗头,ERROR标识局部故障并带堆栈,CRITICAL表示全局性危机;定级本质是明确“谁看、为什么看、看到后做什么”的沟通契约。

Python日志级别不是随便设的,它本质是信息分类工具——按严重程度和用途把消息分层,让开发、运维、调试各取所需。选错级别不仅影响排查效率,还可能掩盖关键问题或刷屏无用信息。
DEBUG:仅限开发阶段的“显微镜”
记录最细粒度的操作细节,比如变量值、函数入参、循环内状态。生产环境默认关闭,避免性能损耗和敏感信息泄露。
- 适合在本地调试时临时开启,配合
logging.basicConfig(level=logging.DEBUG) - 不要写密码、token、用户手机号等敏感内容
- 上线前检查所有
logger.debug(),确认是否应降级或删除
INFO:系统“运行快报”,聚焦关键路径
标记正常流程中的重要节点,如服务启动、配置加载完成、任务开始/结束、外部调用成功返回。目标是让人一眼看清“系统在干什么”。
- 避免每行都打INFO,例如循环体内的单次处理不记INFO
- 推荐格式:
logger.info("User %s logged in via %s", user_id, auth_method)(用占位符,非字符串拼接) - 运维可通过INFO日志快速确认服务是否按预期流转
WARNING:异常苗头,尚未失控
表示出现非预期但未中断流程的情况,比如接口返回码非200但已重试成功、配置项缺失使用了默认值、磁盘剩余空间低于85%。
立即学习“Python免费学习笔记(深入)”;
- 不是报错,但值得人工关注——可作为监控阈值触发依据
- 避免滥用:不要把“用户输入为空”这种业务校验逻辑记为WARNING
- 建议附带上下文,例如
logger.warning("Fallback to cache for order %s, DB timeout", order_id)
ERROR & CRITICAL:必须响应的故障信号
ERROR代表局部失败(如单次数据库查询失败、第三方API调用超时),CRITICAL代表全局性危机(如数据库连接池耗尽、核心配置加载失败导致服务无法启动)。
- ERROR要带异常堆栈:
logger.error("Failed to send email", exc_info=True) - CRITICAL极少使用,通常只在
if not essential_init(): logger.critical("Abort: config invalid"); sys.exit(1)这类场景 - 不要用ERROR代替raise——该抛异常的地方别只打日志
日志级别设计的核心是“谁看、为什么看、看到后做什么”。定级不是技术选择,而是沟通契约。合理分级后,grep、ELK、告警规则才能真正起作用。










