Python logging 日志
学习logging模块 · 难度:进阶 · +15XP
Python logging 日志
Python logging 日志 — 记录程序运行状态
学习前的准备
打开终端,输入 python 进入交互式解释器。logging 模块是 Python 标准库的一部分。
为什么需要日志?print() 不够吗?
很多初学者依赖 print() 输出信息。但 print() 有致命问题:无法区分消息重要程度、无法灵活输出到文件、无法灵活开关。logging 模块解决了这些。
import logging
logging.basicConfig(level=logging.INFO)
logging.info("程序开始")
logging.debug("正在处理数据...") # 这条不会显示(级别低于 INFO)
logging.error("错误:文件不存在")
日志的五个级别
| 级别 | 数值 | 含义 | 使用场景 |
|---|---|---|---|
| DEBUG | 10 | 调试细节 | 开发时的变量追踪 |
| INFO | 20 | 一般信息 | 程序运行关键节点 |
| WARNING | 30 | 警告 | 磁盘空间低等 |
| ERROR | 40 | 错误 | 操作失败但可继续 |
| CRITICAL | 50 | 严重错误 | 程序无法继续 |
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s [%(levelname)s] %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
)
logging.info("服务器启动成功,端口 8080")
logging.warning("磁盘使用率达到 80%")
logging.error("数据库连接失败,将重试")
同时输出到控制台和文件
import logging
logger = logging.getLogger("my_app")
logger.setLevel(logging.DEBUG)
file_handler = logging.FileHandler("app.log", encoding="utf-8")
file_handler.setLevel(logging.DEBUG)
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.WARNING)
logger.addHandler(file_handler)
logger.addHandler(console_handler)
logger.debug("这条只写入文件")
logger.warning("这条同时到文件和控制台")
最佳实践
- 每个模块使用
logger = logging.getLogger(__name__)。 - 不要在库代码中使用 basicConfig()。
- 生产环境中日志级别设为 INFO 或 WARNING。
小结
logging 模块用五个级别区分消息重要性。basicConfig 用于简单场景,多个 handler 用于同时输出到不同目标。从今天起,用日志替换你代码中的 print()。