在python开发中,logging模块是标准库自带的日志记录工具,相比print函数,它支持分级管理、格式化输出和多目标写入,更适合真实项目使用。通过合理的配置,我们可以把程序运行中的关键信息持久化保存,方便后续排查异常。

logging模块的核心概念
logging模块主要包含以下几个组成部分:
- Logger:日志器,程序的入口,用来发出日志。
- Handler:处理器,决定日志输出到哪里,比如控制台或文件。
- Formatter:格式器,定义日志的显示样式。
- Level:日志级别,用于控制日志的详细程度。
日志级别从低到高
| 级别 | 数值 | 说明 |
|---|---|---|
| DEBUG | 10 | 调试细节,开发时使用 |
| INFO | 20 | 正常运行信息 |
| WARNING | 30 | 潜在问题提醒 |
| ERROR | 40 | 功能出错 |
| CRITICAL | 50 | 严重故障 |
快速使用basicConfig
如果只是做简单记录,可以用logging.basicConfig()一次性配置好输出文件和格式。
import logging
# 基础配置:写入app.log,级别为INFO,带时间、级别和消息
logging.basicConfig(
filename='app.log',
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s'
)
logging.info('程序启动成功')
logging.warning('内存使用偏高')
同时输出到控制台和文件
实际项目中常需要既在屏幕看到日志,又保存到文件,这时要自己添加Handler。
import logging
logger = logging.getLogger('my_app')
logger.setLevel(logging.DEBUG)
# 控制台处理器
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)
# 文件处理器
fh = logging.FileHandler('run.log', encoding='utf-8')
fh.setLevel(logging.DEBUG)
# 公共格式
fmt = logging.Formatter('%(asctime)s [%(levelname)s] %(name)s: %(message)s')
ch.setFormatter(fmt)
fh.setFormatter(fmt)
logger.addHandler(ch)
logger.addHandler(fh)
logger.debug('调试信息写入文件')
logger.error('发生错误,请检查配置')
在代码中使用logger
配置好之后,在业务代码里直接调用logger.info()或logger.error()即可,不需要再使用print。
常见注意事项
- 不要重复调用basicConfig,它只在第一次生效。
- 多线程下logging是线程安全的,可放心使用。
- 敏感信息如密码不要写进日志。
合理使用logging模块,可以让python项目的运维和调试更加轻松。