本文主要是介绍Python logging模块使用示例详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《Pythonlogging模块使用示例详解》Python的logging模块是一个灵活且强大的日志记录工具,广泛应用于应用程序的调试、运行监控和问题排查,下面给大家介绍Pythonlogging模...
python 的 logging
模块是一个灵活且强大的日志记录工具,广泛应用于应用程序的调试、运行监控和问题排查。它提供了丰富的功能,包括多级日志记录、多种输出方式、灵活的格式配置等。以下是详细介绍:
一、为什么使用 logging 模块?
- 替代
print
:print
语句仅适合简单调试,而logging
支持持久化、级别控制、异步写入等。 - 分级日志:根据重要性区分日志(如 DEBUG、INFO、ERROR),便于过滤信息。
- 灵活输出:可同时输出到控制台、文件、网络等。
- 线程安全:适用于多线程/多进程环境。
二、核心组件
Logger(记录器)
应用程序直接调用的接口,负责产生日志。
- 通过
logging.getLogger(name)
获取或创建 Logger 实例。 - 支持层级结构(如
'parent.child'
继承父级配置)。
Handler(处理器)
决定日志的输出位置(如控制台、文件、邮件等)。
- 常用 Handler:
- StreamHandler:输出到流(如控制台)。
- FileHandler:输出到文件。
- RotatingFileHandler:按大小滚动日志文件。
- TimedRotatingFileHandler:按时间滚动日志文件。
- SMTPHandler:发送邮件。
Fiwww.chinasem.cnlter(过滤器)
提供更细粒度的日志过滤(如仅记录特定关键词的日志)。
Formatter(格式器)
定义日志的输出格式(时间、级别、消息等)。
常用格式字段:
'%(asctime)s - %(name)s - %(levelname)s - %(message)s'
三、日志级别
从低到高共 6 个级别(低于设定级别的日志将被忽略):
级别 | 数值 | 说明 |
---|---|---|
DEBUG | 10 | 详细调试信息 |
INFO | 20 | 程序正常运行信息 |
WARNING | 30 | 潜在问题,但程序仍运行 |
ERROR | 40 | 严重错误,影响部分功能 |
CRITICAL | 50 | 致命错误,可能导致程序终止 |
四、基本使用步骤
创建 Logger
import logging logger = logging.getLogger(__name__) # 推荐使用模块名作为Logger名称 logger.setLevel(logging.DEBUG) # 设置记录的最低级别
配置 Handler 和 Formatter
# 创建控制台 Handler console_handler = logging.StreamHandler() console_handler.setLevel(logging.WARNING) # 控制台只输出 WARNING 及以上级别 # 创建文件 Handler file_handler = logging.FileHandler('app.log') file_handler.setLevel(logging.DEBUG) # 文件记录所有 DEBUG 及以上级别 # 定义 Formatter formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelnamehttp://www.chinasem.cn)s - %(message)s') console_handler.setFormatter(formatter) file_handler.setFormatter(formatter) # 将 Handler 添加到 Logger logger.addHandler(console_handler) logger.addHandler(file_handler)
记录日志
logger.debug('Debug 信息') logger.info('程序启动') logger.warning('磁盘空间不足') logger.error('请求超时')
五、快速配置(basicConfig)
适用于简单场景的快速配置:
import logging logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(levelname)s编程 - %(message)s', handlers=[ logging.FileHandler('app.log'), logging.StreamHjsandler() ] ) logging.warning('警告信息')
六、高级用法
配置文件或字典
使用 logging.config
模块通过文件或字典配置:
import logging.config config = { 'version': 1, 'formatters': { 'default': {'format': '%(asctime)s - %(levelname)s - %(message)s'} }, 'handlers': { 'console': { 'class': 'logging.StreamHandler', 'formatter': 'default', 'level': 'DEBUG' } }, 'root': { 'handlers': ['console'], 'level': 'INFO' } } logging.config.dictConfig(config)
捕获异常信息
使用 logger.exception
记录异常堆栈:
try: 1 / 0 except Exception: logger.exception('发生异常:')
日志传播
子 Logger 默认将日志传递给父 Logger。可通过 logger.propagate = False
关闭。
七、常见问题
重复日志
原因:多次添加 Handler 或 basicConfig
被多次调用。
解决:确保 Handler 只添加一次,或在 basicConfig
中设置 force=True
。
性能优化
避免在高频代码中记录低级别日志(如 DEBUG),可预先检查级别:
if logger.isEnabledFor(logging.DEBUG): logger.debug(f'耗时操作: {time_consuming()}')
八、总结
logging
模js块通过灵活的配置和分级机制,满足了从简单到复杂的日志需求。掌握其核心组件(Logger、Handler、Formatter)和级别控制,能显著提升程序的可维护性。建议在项目中替代 print
,合理利用日志进行调试和监控。
到此这篇关于Python logging模块使用示例详解的文章就介绍到这了,更多相关Python logging模块使用内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!
这篇关于Python logging模块使用示例详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!