news 2026/7/31 3:22:41

Python logging 模块完整实战:自定义日志器、控制台 + 文件双输出

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python logging 模块完整实战:自定义日志器、控制台 + 文件双输出

前言

在 Python 项目开发中,print()只适合临时调试,正式项目必须使用标准库logging。 logging 支持日志分级、格式化输出、同时打印控制台 + 写入本地文件、灵活过滤日志,是工程开发必备工具。 本文结合代码实例,拆解自定义 logger 完整配置流程,理清日志器、处理器、格式器、日志级别四大核心概念。

目录

前言

一、logging 基础核心概念

1. 五大日志级别(等级从小到大)

2. 四大组件

3. 常用格式占位符

二、完整可运行代码(文中示例源码)

三、运行结果分析(重点!层级过滤规则)

本次代码实际输出

四、两种配置方式对比

方式 1:basicConfig(简易写法,适合小型脚本)

方式 2:自定义 Logger(本文方案,企业项目标准写法)

五、开发常见踩坑点

六、拓展优化方向(可自行扩展)

结语


一、logging 基础核心概念

1. 五大日志级别(等级从小到大)

表格

级别常量用途
DEBUGlogging.DEBUG调试信息,开发阶段使用
INFOlogging.INFO常规运行信息,记录正常流程
WARNINGlogging.WARNING警告,程序可继续运行
ERRORlogging.ERROR错误,部分功能执行失败
CRITICALlogging.CRITICAL致命错误,程序可能终止

规则:设置某个级别后,只输出大于等于该级别的日志。

2. 四大组件

  1. Logger(日志器):日志入口,使用getLogger()创建,推荐命名__name__,避免 root 日志冲突
  2. Handler(处理器):决定日志输出到哪里
    • StreamHandler:输出到控制台
    • FileHandler:输出保存到本地文件
  3. Formatter(格式器):定义日志文本格式
  4. Filter(过滤器):可选,自定义规则过滤日志

3. 常用格式占位符

plaintext

%(name)s logger实例名称 %(levelname)s 日志级别英文名称 %(message)s 日志主体内容 %(asctime)s 时间戳 %(filename)s 文件名 %(lineno)d 行号

二、完整可运行代码(文中示例源码)

python

运行

import logging # 1. 创建日志器实例 logger = logging.getLogger(__name__) # 设置日志器全局最低级别(只是门槛,处理器可以再次限制) logger.setLevel(logging.DEBUG) # 2. 控制台处理器:输出到终端 stream_handler = logging.StreamHandler() # 单独设置控制台输出级别 stream_handler.setLevel(logging.INFO) # 定义日志格式 stream_formatter = logging.Formatter('%(name)s %(levelname)s %(message)s') stream_handler.setFormatter(stream_formatter) # 将处理器绑定到logger logger.addHandler(stream_handler) # 3. 文件处理器:日志写入 log.txt file_handler = logging.FileHandler('log.txt', encoding="utf-8") # 文件日志单独设置级别 file_handler.setLevel(logging.WARNING) file_formatter = logging.Formatter('%(name)s %(levelname)s %(message)s') file_handler.setFormatter(file_formatter) logger.addHandler(file_handler) # 测试输出日志 logger.debug("debug") logger.warning("warning") logger.error("error")

三、运行结果分析(重点!层级过滤规则)

  1. logger.setLevel(logging.DEBUG)日志器接收所有 ≥ DEBUG 的日志,但不代表一定会打印,最终输出受处理器控制。
  2. 控制台处理器:INFO级别 只会输出:INFO、WARNING、ERROR、CRITICAL👉 debug 日志不会打印在控制台
  3. 文件处理器:WARNING级别 只会输出:WARNING、ERROR、CRITICAL👉 debug、info 不会写入 log.txt

本次代码实际输出

控制台输出:

plaintext

__main__ WARNING warning __main__ ERROR error

log.txt 文件内容:

plaintext

__main__ WARNING warning __main__ ERROR error

💡关键知识点: Logger 级别 → 第一道过滤;Handler 级别 → 第二道过滤。两道关卡都要满足,日志才会最终输出。

四、两种配置方式对比

方式 1:basicConfig(简易写法,适合小型脚本)

优点:代码简短 缺点:只能创建一个默认 root 日志器,不支持多处理器差异化级别,大型项目不推荐

python

运行

import logging logging.basicConfig( level=logging.DEBUG, format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', handlers=[ logging.StreamHandler(), logging.FileHandler("log.txt",encoding="utf-8") ] )

方式 2:自定义 Logger(本文方案,企业项目标准写法)

✅ 支持控制台、文件设置不同日志级别✅ 可以创建多个独立日志器,互不干扰 ✅ 格式灵活配置,扩展性强 生产环境优先使用这种写法。

五、开发常见踩坑点

  1. 重复打印日志:多次 addHandler,避免函数反复执行添加处理器
  2. 中文乱码:FileHandler 务必指定encoding="utf-8"
  3. 级别混淆:很多新手误以为设置 logger 级别就万事大吉,忘记 handler 也有独立级别
  4. 不要直接使用logging.debug(),会使用 root 日志器,项目模块化推荐getLogger(__name__)

六、拓展优化方向(可自行扩展)

  1. 使用 RotatingFileHandler / TimedRotatingFileHandler,实现日志分割,防止单个日志文件过大
  2. 封装日志工具类,统一项目日志配置
  3. 增加日志颜色,美化控制台输出
  4. 增加 Filter,根据内容过滤日志

结语

logging 是 Python 开发必备基础能力,区分日志器、处理器两级过滤逻辑是理解难点。 当你需要同时控制台看简洁日志、文件保存更重要的告警错误日志时,本文这种多 Handler 方案就是最优选择。

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

LM393电压比较器:从核心原理到电路实战全解析

1. 项目概述:从“比较”开始说起在电子设计的江湖里,有一个看似不起眼却无处不在的“裁判官”——电压比较器。它的工作简单而纯粹:比较两个输入电压的大小,然后给出一个非高即低的判决结果。今天要聊的LM393,就是这类…

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

电磁场鲁棒优化技术解析与应用实践

1. 电磁场鲁棒优化概述电磁场耦合仿真中的鲁棒优化是一个专门针对电磁系统设计稳定性需求而发展起来的技术方向。在真实的工程环境中,电磁设备往往面临着材料参数波动、制造公差、温度变化等多重不确定性因素的干扰。传统的确定性优化方法虽然能在理想条件下获得良好…

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

Modbus报文解析实战:从字节流到工业通讯故障排查

1. 从一次通讯故障说起:为什么需要深入理解Modbus报文那天下午,产线上的一台关键设备突然“失联”了。上位机软件上,代表设备状态的指示灯从绿色变成了刺眼的红色,监控数据全部定格。现场工程师初步检查了PLC电源、网络连接&#…

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

AHB总线协议验证:VIP工程实践与典型问题深度解析

1. 从“协议”到“验证”:AHB总线与VIP的工程实践视角在数字芯片设计的浩瀚世界里,AMBA总线协议家族无疑是连接各个IP模块的“高速公路系统”。其中,AHB(Advanced High-performance Bus)作为这个家族中承上启下的关键一…

作者头像 李华