news 2026/7/31 3:34:14

Python logging 日志模块入门指南:从基础配置到多处理器实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python logging 日志模块入门指南:从基础配置到多处理器实战

一、为什么需要日志?

在开发 Python 应用时,我们经常需要追踪程序的运行状态、调试错误、记录关键操作信息。虽然print()能应付简单的调试场景,但在正式项目中,日志系统才是更专业的选择。Python 内置的logging模块提供了灵活、可配置的日志记录功能,支持多个输出目标、自定义格式和分级管理,是每个 Python 开发者的必备技能。

二、核心概念速览

1. 日志级别(Level)

日志级别决定了信息的重要程度。logging 模块定义了以下标准级别,数值越大优先级越高:

  • DEBUG(10):调试信息,用于开发阶段排查问题。
  • INFO(20):普通信息,记录程序正常运行的关键步骤。
  • WARNING / WARN(30):警告信息,表示可能出现问题但程序仍可继续运行。
  • ERROR(40):错误信息,表示发生了影响功能的错误。
  • CRITICAL / FATAL(50):严重错误,表示程序可能无法继续运行。

通过设置日志级别,你可以灵活控制输出哪些信息:比如开发时设为 DEBUG 查看所有细节,部署到生产环境时升到 WARNING 只关注警告和错误。

2. 日志格式(Format)

日志格式决定了每条日志的输出内容。常用的格式化字段包括:

格式字段含义
%(asctime)s日志时间戳,格式可自定义
%(name)s日志实例名,默认为 root
%(levelname)s日志级别英文名(如 DEBUG、INFO)
%(levelno)s日志级别数值(10、20、30 等)
%(message)s日志内容
%(lineno)d输出日志的代码行号
%(module)s调用日志的模块名
%(filename)s文件名(不含路径)
%(pathname)s文件完整路径

3. 处理器(Handlers)

处理器决定日志的输出目的地。最常用的两种是:

  • StreamHandler:流式处理器,输出到控制台(sys.stdoutsys.stderr)。
  • FileHandler:文件处理器,将日志写入指定文件。

通过组合多个处理器,你可以实现“控制台实时查看 + 文件持久化存储”的日志方案,并且每个处理器都可以独立设置日志级别和格式。

三、基础用法:快速上手

使用logging.basicConfig()可以快速配置全局日志系统。以下示例同时启用了控制台和文件输出:

import logging import sys logging.basicConfig( level=logging.DEBUG, format='%(lineno)d --%(module)s--%(filename)s--%(name)s--%(levelname)s --%(message)s', handlers=[ logging.StreamHandler(sys.stdout), # 输出到控制台 logging.FileHandler("log") # 输出到文件 ] ) logging.debug("debug666") logging.info("info666") logging.warning("warning666") logging.error("error666") logging.critical("critical666")

这种方式适合小型脚本或测试场景,但无法对不同处理器单独设置级别和格式。更灵活的方案是单独配置每个处理器。

四、进阶用法:多实例与独立处理器

在实际项目中,我们通常需要为不同模块创建独立的日志实例,并为每个实例配置各自的处理器和格式。下面是一个完整示例:

import logging ----- 创建第一个日志实例 ----- logger = logging.getLogger(name) logger.setLevel(logging.DEBUG) # 实例级别设为 DEBUG,允许所有级别通过 控制台处理器:只输出 INFO 及以上级别 stream_handler = logging.StreamHandler() stream_handler.setLevel(logging.INFO) stream_formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) stream_handler.setFormatter(stream_formatter) logger.addHandler(stream_handler) 文件处理器:只输出 WARNING 及以上级别 file_handler = logging.FileHandler('log.txt') file_handler.setLevel(logging.WARNING) file_formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) file_handler.setFormatter(file_formatter) logger.addHandler(file_handler) 测试输出 logger.debug("debug") logger.info("info") logger.warning("warn") logger.error("error") logger.critical("fatal") ----- 创建第二个日志实例(独立配置)----- logger2 = logging.getLogger("用户模块") logger2.setLevel(logging.DEBUG) file_handler2 = logging.FileHandler('log2.txt', encoding='utf-8') file_handler2.setLevel(logging.WARNING) file_formatter2 = logging.Formatter( '%(asctime)s - %(levelname)s - %(name)s - %(message)s' ) file_handler2.setFormatter(file_formatter2) logger2.addHandler(file_handler2) logger2.debug("debug") logger2.info("info") logger2.warning("warn") logger2.error("error") logger2.critical("fatal")

代码解析

  • 实例创建:getLogger(__name__)以当前模块名创建日志实例;getLogger("用户模块")创建自定义名称的实例,便于按模块区分日志来源。
  • 级别的两层过滤:日志实例和处理器各自有级别设置。只有当日志消息的级别同时满足“大于等于实例级别”和“大于等于处理器级别”时,才会被输出。
  • 独立配置:每个日志实例拥有独立的处理器集合,互不干扰。第一个实例的 DEBUG 日志不会出现在控制台(被流处理器过滤),第二个实例的日志也不会写入log.txt

五、运行结果解读

运行上述代码后,控制台将看到:

2026-07-30 12:00:00,123 - __main__ - INFO - info 2026-07-30 12:00:00,124 - __main__ - WARNING - warn 2026-07-30 12:00:00,124 - __main__ - ERROR - error 2026-07-30 12:00:00,125 - __main__ - CRITICAL - fatal

注意:debug消息没有出现在控制台,因为流处理器的级别设为了 INFO。

文件log.txt中只有 WARNING 及更高级别的日志(warn、error、fatal),DEBUG 和 INFO 被文件处理器过滤掉了。

文件log2.txt中只包含第二个实例的 WARNING 及以上级别日志,两个日志实例完全独立。

六、总结

Python 的logging模块提供了从简单到复杂的日志解决方案:

  • 快速开始:basicConfig()一行搞定基础配置。
  • 精细控制:为每个处理器独立设置级别和格式,实现“控制台看详情 + 文件存要害”的分级记录。
  • 模块化隔离:getLogger()创建不同命名的实例,让各模块的日志互不干扰。

掌握这些基础后,你还可以进一步探索日志的轮转(RotatingFileHandler)、过滤器(Filter)和配置文件(logging.config)等高级特性,构建健壮的应用日志体系。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/31 3:33:50

游戏开发者日志解析:从宣传图还原开发流程与美术设计

在游戏开发领域,官方开发者日志是连接开发团队与玩家社群的重要桥梁。它不仅展示了项目进度,还通过视觉素材和文字说明,让玩家深入了解游戏的设计理念、角色设定和技术实现细节。本文将以“第一战队豪兽者 纪念版手誓剑UNI.ver”的官方开发者…

作者头像 李华
网站建设 2026/7/31 3:31:44

博途V16 S7-1200/1500 PLC系统时间获取与字符串转换实战指南

1. 项目概述:从设备时间到字符串的精准掌控在工业自动化项目里,尤其是涉及到数据记录、生产批次追溯、设备运行日志或者与上位机系统(如MES、SCADA)进行数据交互时,一个精准、格式统一的时间戳往往是不可或缺的。想象一…

作者头像 李华
网站建设 2026/7/31 3:31:08

Python实现脉冲神经网络(SNN)的类脑计算实践

1. 项目概述:Python模拟生物神经网络的现实意义在咖啡厅里第一次看到神经形态芯片的论文时,我的手抖得差点打翻了杯子。那篇论文展示的脉冲神经网络(SNN)在功耗效率上比传统深度学习模型高出两个数量级,这让我意识到:我们可能正站…

作者头像 李华
网站建设 2026/7/31 3:30:37

如何让你的Windows 11/10重获新生:Win11Debloat终极优化指南

如何让你的Windows 11/10重获新生:Win11Debloat终极优化指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter …

作者头像 李华
网站建设 2026/7/31 3:27:03

Python构建RAG知识库问答系统实战

1. Python RAG知识库问答系统实战指南在信息爆炸的时代,如何从海量文档中快速准确地获取所需信息成为企业和个人的迫切需求。RAG(Retrieval-Augmented Generation)技术结合了信息检索与生成模型的优势,正在重塑知识管理领域。作为…

作者头像 李华
网站建设 2026/7/31 3:24:31

GPT-OSS大模型推理优化与安全控制实践

1. 项目概述:AI行动下的可控智能体技术演进在人工智能技术快速迭代的当下,GPT-5与GPT-OSS作为新一代大语言模型的代表,正在推动产业智能化进入新阶段。不同于早期模型单纯追求参数规模,当前技术发展更注重推理效率、安全边界与商业…

作者头像 李华