Python logging模块使用示例详解

2025-05-18 02:50

本文主要是介绍Python logging模块使用示例详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《Pythonlogging模块使用示例详解》Python的logging模块是一个灵活且强大的日志记录工具,广泛应用于应用程序的调试、运行监控和问题排查,下面给大家介绍Pythonlogging模...

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

一、为什么使用 logging 模块?

  • 替代 printprint 语句仅适合简单调试,而 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 个级别(低于设定级别的日志将被忽略):

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

四、基本使用步骤

创建 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()}')

八、总结

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

到此这篇关于Python logging模块使用示例详解的文章就介绍到这了,更多相关Python logging模块使用内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于Python logging模块使用示例详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1154638

相关文章

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

Python如何实现高效的文件/目录比较

《Python如何实现高效的文件/目录比较》在系统维护、数据同步或版本控制场景中,我们经常需要比较两个目录的差异,本文将分享一下如何用Python实现高效的文件/目录比较,并灵活处理排除规则,希望对大... 目录案例一:基础目录比较与排除实现案例二:高性能大文件比较案例三:跨平台路径处理案例四:可视化差异报

python之uv使用详解

《python之uv使用详解》文章介绍uv在Ubuntu上用于Python项目管理,涵盖安装、初始化、依赖管理、运行调试及Docker应用,强调CI中使用--locked确保依赖一致性... 目录安装与更新standalonepip 安装创建php以及初始化项目依赖管理uv run直接在命令行运行pytho

Python中yield的用法和实际应用示例

《Python中yield的用法和实际应用示例》在Python中,yield关键字主要用于生成器函数(generatorfunctions)中,其目的是使函数能够像迭代器一样工作,即可以被遍历,但不会... 目录python中yield的用法详解一、引言二、yield的基本用法1、yield与生成器2、yi

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

深度解析Python yfinance的核心功能和高级用法

《深度解析Pythonyfinance的核心功能和高级用法》yfinance是一个功能强大且易于使用的Python库,用于从YahooFinance获取金融数据,本教程将深入探讨yfinance的核... 目录yfinance 深度解析教程 (python)1. 简介与安装1.1 什么是 yfinance?

MySQL中REPLACE函数与语句举例详解

《MySQL中REPLACE函数与语句举例详解》在MySQL中REPLACE函数是一个用于处理字符串的强大工具,它的主要功能是替换字符串中的某些子字符串,:本文主要介绍MySQL中REPLACE函... 目录一、REPLACE()函数语法:参数说明:功能说明:示例:二、REPLACE INTO语句语法:参数

redis数据结构之String详解

《redis数据结构之String详解》Redis以String为基础类型,因C字符串效率低、非二进制安全等问题,采用SDS动态字符串实现高效存储,通过RedisObject封装,支持多种编码方式(如... 目录一、为什么Redis选String作为基础类型?二、SDS底层数据结构三、RedisObject

Python脚本轻松实现检测麦克风功能

《Python脚本轻松实现检测麦克风功能》在进行音频处理或开发需要使用麦克风的应用程序时,确保麦克风功能正常是非常重要的,本文将介绍一个简单的Python脚本,能够帮助我们检测本地麦克风的功能,需要的... 目录轻松检测麦克风功能脚本介绍一、python环境准备二、代码解析三、使用方法四、知识扩展轻松检测麦

Python多线程应用中的卡死问题优化方案指南

《Python多线程应用中的卡死问题优化方案指南》在利用Python语言开发某查询软件时,遇到了点击搜索按钮后软件卡死的问题,本文将简单分析一下出现的原因以及对应的优化方案,希望对大家有所帮助... 目录问题描述优化方案1. 网络请求优化2. 多线程架构优化3. 全局异常处理4. 配置管理优化优化效果1.