3. logging模块基础

调试代码,很多人第一反应就是 print()。说实话,我早年也是这么干的。但项目一复杂,print 的弊端就出来了——上线前得一个个删,删漏了还容易出事故。后来我改用 logging,嗯,真香。

3.1 logging 是什么?

logging 是 Python 自带的日志模块。说白了,它就是个比 print 更专业的“记录员”。你告诉它要记什么、怎么记、记到哪里去,它都能帮你搞定。

我个人习惯把 logging 比作“带等级的 print”。为什么这么说?因为 logging 不光能输出信息,还能给信息打上“严重程度”的标签。这样你在排查问题时,可以快速过滤掉无关紧要的日志,直奔关键错误。

核心优势:

  • 自带时间戳、模块名、行号等信息
  • 可以同时输出到控制台和文件
  • 支持日志分级,按需过滤
  • 不需要手动删除,上线后也能保留

3.2 日志级别:五个等级,够用

logging 定义了五个级别,从低到高分别是:

级别 数值 什么时候用?
DEBUG 10 调试信息,比如变量值、函数入口
INFO 20 正常流程信息,比如“服务启动成功”
WARNING 30 警告,程序还能跑,但需要注意
ERROR 40 错误,某个功能挂了,但程序没崩溃
CRITICAL 50 严重错误,程序可能撑不住了

为什么会这样设计?你想想看,开发时你可能想看所有 DEBUG 信息,但上线后你只关心 ERROR 和 CRITICAL。logging 通过设置级别,就能轻松做到这一点。

我的经验: 我在项目中遇到过一位同事,把所有日志都写成 INFO。结果日志文件一天就涨到几个 G,排查问题反而更困难。记住:级别不是摆设,该用 DEBUG 就用 DEBUG。

3.3 基本配置:三行代码搞定

配置 logging 其实很简单。最常用的就是 basicConfig() 方法。来看个例子:

import logging

logging.basicConfig(
    level=logging.DEBUG,
    format='%(asctime)s - %(levelname)s - %(message)s'
)

logging.debug("这是一条调试信息")
logging.info("程序正常运行")
logging.warning("磁盘空间不足")
logging.error("数据库连接失败")
logging.critical("系统即将崩溃")

运行后,控制台会输出类似这样的内容:

2024-01-15 10:30:25,123 - DEBUG - 这是一条调试信息
2024-01-15 10:30:25,123 - INFO - 程序正常运行
2024-01-15 10:30:25,123 - WARNING - 磁盘空间不足
2024-01-15 10:30:25,123 - ERROR - 数据库连接失败
2024-01-15 10:30:25,123 - CRITICAL - 系统即将崩溃

注意看,level=logging.DEBUG 表示所有级别 >= DEBUG 的日志都会输出。如果你改成 level=logging.WARNING,那 DEBUG 和 INFO 就不会显示了。

避坑指南: 我曾经在同一个脚本里调用了两次 basicConfig(),结果第二次配置完全没生效。后来查文档才发现,basicConfig() 只能调用一次,后续调用会被忽略。如果你需要动态修改配置,建议用 logger.setLevel() 的方式。

3.4 输出到控制台:默认行为

其实,logging 默认就会输出到控制台。你什么都不配,直接写 logging.warning("test") 也能看到输出。但默认只显示 WARNING 及以上级别的日志。

我个人习惯在开发阶段把级别设为 DEBUG,这样所有信息都能看到。上线前再改成 INFO 或 WARNING,避免刷屏。

# 开发环境
logging.basicConfig(level=logging.DEBUG)

# 生产环境
logging.basicConfig(level=logging.WARNING)

你可能会问:能不能同时输出到控制台和文件?当然可以,但那是后面章节的内容了。现在先把控制台玩明白。

3.5 知识体系总览

下面这张图,是我梳理的 logging 模块核心知识结构。你可以把它当作本章的“地图”:

logging 模块 日志级别 DEBUG (10) INFO (20) WARNING (30) ERROR (40) CRITICAL (50) 基本配置 basicConfig() level 参数 format 参数 输出目标 控制台(默认) 文件(后续)

这张图把本章的核心内容串起来了。你从中间开始看,左边是日志级别,中间是配置方法,右边是输出目标。记住这个结构,后面学 Handler、Formatter 时就不会迷路。

小技巧: 刚开始用 logging 时,我建议你直接复制上面的代码跑一遍。亲眼看到 DEBUG、INFO、WARNING 在控制台里按级别显示,比看十遍文档都管用。

好了,logging 的基础就这些。别觉得简单,基础打牢了,后面学高级玩法才不费劲。记住:用 logging 替代 print,是你从“野路子”走向“正规军”的第一步。

可可精品资料库