日志级别 INFO 和 DEBUG 有什么区别?该怎么用?
DEBUG 是给开发者的细粒度调试信息,生产环境通常关闭;INFO 是有意义的业务事件记录,生产环境常态开启。本文讲清各级别语义和使用规范。
一句话:DEBUG 记录"程序内部怎么走的"(给开发者排障用,生产关闭),INFO 记录"业务上发生了什么"(有意义的运行事件,生产常态开启)。
各级别语义
| 级别 | 语义 | 典型内容 | 生产环境 |
|---|---|---|---|
| DEBUG | 最细粒度调试信息 | 变量值、函数进出、分支判断 | 通常关闭 |
| INFO | 有意义的运行事件 | 服务启动、任务完成、用户关键操作 | 开启 |
| WARN | 潜在问题,不影响运行 | 配置缺失用默认值、重试、资源接近上限 | 开启 |
| ERROR | 错误,功能受影响但程序活着 | 请求失败、异常被捕获 | 开启+告警 |
| FATAL/CRITICAL | 致命错误,程序即将终止 | 数据库连不上、启动失败 | 开启+告警 |
实际例子
logger.debug(f"查询参数: {params}, 耗时: {elapsed}ms") # 排障细节
logger.info(f"用户 {user_id} 下单成功,订单号 {order_id}") # 业务事件
logger.warning(f"缓存未命中,回源查询") # 异常但可容忍
logger.error(f"支付接口调用失败: {e}") # 功能错误
使用规范
- 生产环境级别设 INFO:DEBUG 日志量巨大且暴露内部细节;
- 临时排查可动态开 DEBUG:很多框架支持运行时调整某个 logger 的级别;
- ERROR 配合告警:ERROR 级日志应触发告警流程,而不只是写文件。
观测云对照
观测云日志查看器支持按日志级别(status 字段)快速过滤 DEBUG/INFO/ERROR;监控器可以配置"ERROR 日志数量超过阈值时告警"到钉钉/企微/飞书。
常见问题(FAQ)
Q:DEBUG 日志不写,出问题时怎么办?
A:靠 INFO+ERROR 的上下文、APM 链路追踪定位;确实需要时临时打开 DEBUG 级别复现问题,查完关闭。
Q:TRACE 是什么级别?
A:比 DEBUG 更细(如循环中每次迭代),log4j2、Python logging(自定义)等有,一般用不到。
Q:级别设高了会丢日志吗?
A:会。logger 级别是 INFO 时,DEBUG 消息直接不输出。级别是"门槛",低于门槛的丢弃。