Python logging模块使用指南

在这里插入图片描述

Python 的 logging 模块是一个灵活且强大的日志记录工具,广泛应用于应用程序的调试、运行监控和问题排查。它提供了丰富的功能,包括多级日志记录、多种输出方式、灵活的格式配置等。以下是详细介绍:


一、为什么使用 logging 模块?

  • 替代 printprint 语句仅适合简单调试,而 logging 支持持久化、级别控制、异步写入等。
  • 分级日志:根据重要性区分日志(如 DEBUG、INFO、ERROR),便于过滤信息。
  • 灵活输出:可同时输出到控制台、文件、网络等。
  • 线程安全:适用于多线程/多进程环境。

二、核心组件

  1. Logger(记录器)
    应用程序直接调用的接口,负责产生日志。

    • 通过 logging.getLogger(name) 获取或创建 Logger 实例。
    • 支持层级结构(如 'parent.child' 继承父级配置)。
  2. Handler(处理器)
    决定日志的输出位置(如控制台、文件、邮件等)。

    • 常用 Handler:
      • StreamHandler:输出到流(如控制台)。
      • FileHandler:输出到文件。
      • RotatingFileHandler:按大小滚动日志文件。
      • TimedRotatingFileHandler:按时间滚动日志文件。
      • SMTPHandler:发送邮件。
  3. Filter(过滤器)
    提供更细粒度的日志过滤(如仅记录特定关键词的日志)。

  4. Formatter(格式器)
    定义日志的输出格式(时间、级别、消息等)。

    • 常用格式字段:
      '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
      

三、日志级别

从低到高共 6 个级别(低于设定级别的日志将被忽略):

级别数值说明
DEBUG10详细调试信息
INFO20程序正常运行信息
WARNING30潜在问题,但程序仍运行
ERROR40严重错误,影响部分功能
CRITICAL50致命错误,可能导致程序终止

四、基本使用步骤

  1. 创建 Logger

    import logginglogger = logging.getLogger(__name__)  # 推荐使用模块名作为Logger名称
    logger.setLevel(logging.DEBUG)        # 设置记录的最低级别
    
  2. 配置 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 - %(levelname)s - %(message)s')
    console_handler.setFormatter(formatter)
    file_handler.setFormatter(formatter)# 将 Handler 添加到 Logger
    logger.addHandler(console_handler)
    logger.addHandler(file_handler)
    
  3. 记录日志

    logger.debug('Debug 信息')
    logger.info('程序启动')
    logger.warning('磁盘空间不足')
    logger.error('请求超时')
    

五、快速配置(basicConfig

适用于简单场景的快速配置:

import logginglogging.basicConfig(level=logging.INFO,format='%(asctime)s - %(levelname)s - %(message)s',handlers=[logging.FileHandler('app.log'),logging.StreamHandler()]
)logging.warning('警告信息')

六、高级用法

  1. 配置文件或字典
    使用 logging.config 模块通过文件或字典配置:

    import logging.configconfig = {'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)
    
  2. 捕获异常信息
    使用 logger.exception 记录异常堆栈:

    try:1 / 0
    except Exception:logger.exception('发生异常:')
    
  3. 日志传播
    子 Logger 默认将日志传递给父 Logger。可通过 logger.propagate = False 关闭。


七、常见问题

  1. 重复日志
    原因:多次添加 Handler 或 basicConfig 被多次调用。
    解决:确保 Handler 只添加一次,或在 basicConfig 中设置 force=True

  2. 性能优化
    避免在高频代码中记录低级别日志(如 DEBUG),可预先检查级别:

    if logger.isEnabledFor(logging.DEBUG):logger.debug(f'耗时操作: {time_consuming()}')
    

八、总结

logging 模块通过灵活的配置和分级机制,满足了从简单到复杂的日志需求。掌握其核心组件(Logger、Handler、Formatter)和级别控制,能显著提升程序的可维护性。建议在项目中替代 print,合理利用日志进行调试和监控。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/905710.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开发技术.前端开发相关问题

第一部分 响应式布局 1. 几个布局单位概念 PX: px像素(Pixel) 相对长度单位。像素px是相对于显示器屏幕分辨率而言的。 PX特点 1. IE无法调整那些使用px作为单位的字体大小; 2. 国外的大部分网站能够调整的原因在于其使用了em或rem作为字体…

1. Go 语言环境安装

👑 博主简介:高级开发工程师 👣 出没地点:北京 💊 人生目标:自由 ——————————————————————————————————————————— 版权声明:本文为原创文章&#xf…

WPF自定义控件开发全指南:多内容切换与动画集成

WPF自定义控件开发全指南:多内容切换与动画集成 一、控件基础架构设计1.1 选择控件基类1.2 定义关键属性 二、动画系统集成2.1 淡入淡出动画实现2.2 滑动动画实现 三、视觉状态管理四、完整使用示例4.1 XAML声明4.2 动画触发逻辑 五、扩展与优化5.1 性能优化建议5.2…

数据结构 -- 顺序查找和折半查找

查找的基本概念 基本概念 查找:在数据集合中寻找满足某种条件的数据元素的过程 查找表(查找结构):用于查找的数据集合称为查找表,它由同一类型的数据结构元素(或记录)组成 关键字&#xff1…

汽车功能安全--TC3xx MBIST设计要点

英飞凌针对硬件故障的自测,提供了四种机制:PBIST、LBIST、MONBIST和MBIST。 LBIST和MONBIST我们已经聊过了,今天就快速介绍下MBIST。 MBIST,全程Memory Built-in Self Test,用于检测SRAM数据单元的完整性。 在26262…

openpi 入门教程

系列文章目录 目录 系列文章目录 前言 一、运行要求 二、安装 三、模型检查点 3.1 基础模型 3.2 微调模型 四、运行预训练模型的推理 五、在自己的数据上微调基础模型 5.1. 将数据转换为 LeRobot 数据集 5.3. 启动策略服务器并运行推理 5.4 更多示例 六、故障排除…

java加强 -Collection集合

集合是一种容器,类似于数组,但集合的大小可变,开发中也非常常用。Collection代表单列集合,每个元素(数据)只包含1个值。Collection集合分为两类,List集合与set集合。 特点 List系列集合&#…

深入理解ThingsBoard的Actor模型

1、ThingsBoard系统中定义了哪些Actor ✅ ThingsBoard Actor 创建机制与作用对照表: Actor 类型 何时创建 由谁创建 是否缓存 作用描述 SystemActor 系统启动时 DefaultActorService / ActorSystem ✅ 是 ★ ThingsBoard 平台服务级别管理器:负责创建所有的Actor AppActor

WPS一旦打开,就会修改默认打开方式,怎么解?

目录 前言 解决方法 结语 前言 电脑上同时存在WPS和微软的Office全家桶,但是我更喜欢用Office全家桶。前几天刚在设置改过来,忘记更改pdf文件打开默认应用。结果没过几天,不小心用WPS打开pdf文件时候,给我把默认设置全改回去了…

深度学习中--模型调试与可视化

第一部分:损失函数与准确率的监控(Loss / Accuracy Curve) 1. 为什么要监控 Loss 与 Accuracy? Loss 是模型优化的依据,但它可能下降了 Accuracy 反而没变(过拟合信号) Accuracy 才是评估效果的…

中间件-RocketMQ

RocketMQ 基本架构消息模型消费者消费消息模式顺序消息机制延迟消息批量消息事务消息消息重试最佳实践 基本架构 nameServer: 维护broker列表信息,客户端连接时只需要连接nameServer。可配置成集群。 broker:broker分为master和slave,master负…

anaconda3如何切换虚拟环境

在 Anaconda3 中切换虚拟环境可以通过 命令行 或 Anaconda Navigator 图形界面实现。以下是详细步骤: 方法1:通过命令行切换(推荐) 1. 查看所有虚拟环境 conda env list # 或 conda info --envs 输出示例: base …

【vue】axios网络请求介绍

一、基础使用 1.引入js文件 2.在methods中的函数里写 axios.get(路径) .then((res))>{ console.log(res.data);//控制台打印结果数据 this.listArrres.data//定义数组来接收返回来的数据 }) 二、参数传递 参数传递一般在路径后面使用 params:{ num:2,…

机器学习 --- KNN算法

机器学习 — KNN算法 文章目录 机器学习 --- KNN算法一,sklearn机器学习概述二,KNN算法---分类2.1样本距离判断2.2 KNN算法原理2.3 KNN缺点2.4 API2.5 使用sklearn中鸢尾花数据集实现KNN 一,sklearn机器学习概述 获取数据、数据处理、特征工…

Spring Boot 中的重试机制

Retryable 注解简介 Retryable 注解是 Spring Retry 模块提供的,用于自动重试可能会失败的方法。在微服务架构和分布式系统中,服务之间的调用可能会因为网络问题、服务繁忙等原因失败。使用 Retryable 可以提高应用的稳定性和容错能力 1。 使用步骤 &…

FPGA生成随机数的方法

FPGA生成随机数的方法,目前有以下几种: 1、震荡采样法 实现方式一:通过低频时钟作为D触发器的时钟输入端,高频时钟作为D触发器的数据输入端,使用高频采样低频,利用亚稳态输出随机数。 实现方式二:使用三个…

(五)毛子整洁架构(分布式日志/Redis缓存/OutBox Pattern)

文章目录 项目地址一、结构化日志1.1 使用Serilog1. 安装所需要的包2. 注册服务和配置3. 安装Seq服务 1.2 添加分布式id中间件1. 添加中间件2. 注册服务3. 修改Application的LoggingBehavior 二、Redis缓存2.1 添加缓存1. 创建接口ICaching接口2. 实现ICaching接口3. 注册Cachi…

Vue.js 全局导航守卫:深度解析与应用

在 Vue.js 开发中,导航守卫是一项极为重要的功能,它为开发者提供了对路由导航过程进行控制的能力。其中,全局导航守卫更是在整个应用的路由切换过程中发挥着关键作用。本文将深入探讨全局导航守卫的分类、作用以及参数等方面内容。 一、全局…

使用FastAPI和React以及MongoDB构建全栈Web应用05 FastAPI快速入门

一、FastAPI概述 1.1 什么是FastAPI FastAPI is a modern, high-performance Python web framework designed for building APIs. It’s rapidly gaining popularity due to its ease of use, speed, and powerful features. Built on top of Starlette, FastAPI leverages a…

如何查看打开的 git bash 窗口是否是管理员权限打开

在 git bash 中输入: net session >nul 2>&1 && (echo Ok) || (echo Failed) 显示 OK 》是管理员权限; 显示 Failed 》不是管理员权限。 如何删除此步生成的垃圾文件: 新建一个 .txt 文件,输入以下代码…