python中logger包的详细使用教程(附实例代码)

 更新时间:2025年05月28日 08:26:33   作者:SunkingYang  
Python logging模块是标准库日志工具,支持多级别、多目标、多格式日志管理,这篇文章主要介绍了python中logger包详细使用的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

前言

Python 的 logging 模块是标准库中用于记录日志的核心工具,通过灵活配置可实现多级别、多目标、多格式的日志管理。以下是其核心用法及详细说明:

功能说明

一、Logger 的创建与基础配置

  • 创建 Logger 实例使用 logging.getLogger(name) 创建或获取一个 Logger 对象。若未指定名称,默认返回根 Logger(root)。

    import logging
    logger = logging.getLogger('my_app')  # 创建名为 'my_app' 的 Logger
    
  • 设置日志级别Logger 的级别决定其处理的最低日志等级,可选级别从低到高为:DEBUGINFOWARNINGERRORCRITICAL

    logger.setLevel(logging.DEBUG)  # 记录 DEBUG 及以上级别的日志
    
  • 默认级别与继承关系

    • 若未显式设置级别,Logger 会继承父级(如 root)的级别,默认 WARNING
    • Logger 名称支持层级结构(如 a.b 继承 a 的配置),便于模块化日志管理。

二、Handler 的配置与使用

Handler 负责将日志发送到不同目标(如文件、控制台),可同时添加多个 Handler 实现多路输出。

常用 Handler 类型

Handler功能示例
StreamHandler输出到控制台(默认 sys.stderrlogging.StreamHandler()
FileHandler输出到文件logging.FileHandler('app.log', mode='a')
RotatingFileHandler日志文件按大小回滚(避免文件过大)from logging.handlers import RotatingFileHandler
TimedRotatingFileHandler按时间回滚日志文件(如每天生成新文件)from logging.handlers import TimedRotatingFileHandler

示例:同时输出到文件和控制台

# 文件 Handler(按大小回滚)
from logging.handlers import RotatingFileHandler
file_handler = RotatingFileHandler(
    'app.log', maxBytes=1024*1024, backupCount=5  # 单个文件最大1MB,保留5个备份
)
file_handler.setLevel(logging.INFO)

# 控制台 Handler
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)

# 添加 Handler 到 Logger
logger.addHandler(file_handler)
logger.addHandler(console_handler)

三、Formatter 自定义日志格式

通过 Formatter 可定义日志输出的格式,支持占位符如 %(asctime)s(时间)、%(levelname)s(级别)、%(message)s(消息)等。

formatter = logging.Formatter(
    '%(asctime)s - %(name)s - %(levelname)s - %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S'  # 自定义时间格式
)
file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)

四、记录不同级别的日志

通过 Logger 对象调用对应级别的方法记录日志:

logger.debug('调试信息,用于开发阶段追踪细节')    # 仅当 Logger 级别 ≤ DEBUG 时输出
logger.info('常规信息,如服务启动')              
logger.warning('潜在问题警告,如参数缺失')        
logger.error('程序错误,但应用仍可运行')          
logger.critical('严重错误,可能导致程序崩溃')     

五、高级配置与最佳实践

  • 全局配置快速启动使用 logging.basicConfig() 快速配置根 Logger,适合简单场景:

    logging.basicConfig(
        level=logging.INFO,
        format='%(asctime)s - %(message)s',
        handlers=[logging.FileHandler('app.log'), logging.StreamHandler()]
    )
    
  • 过滤器(Filter)通过 Filter 实现更精细的日志筛选,例如仅记录特定模块或包含关键字的日志:

    class CustomFilter(logging.Filter):
        def filter(self, record):
            return 'important' in record.getMessage()  # 仅记录含 'important' 的日志
    
    logger.addFilter(CustomFilter())
    
  • 避免重复日志若 Logger 层级配置不当,可能导致日志重复输出。建议在子 Logger 中禁用传播到父级:

    child_logger = logging.getLogger('my_app.sub_module')
    child_logger.propagate = False  # 阻止日志传递给父 Logger
    

六、常见问题与调试

  • 日志不显示:检查 Logger 和 Handler 的级别是否高于日志调用级别。
  • 多 Handler 冲突:确保每个 Handler 的级别和 Formatter 独立配置。
  • 性能优化:高频日志场景可使用 RotatingFileHandler 避免文件过大,或异步日志库(如 concurrent-log-handler)。

以下是 Python 中 logging 模块的详细使用教程,涵盖基础配置、高级用法及最佳实践,结合多篇权威资料整理而成:

使用方法

一、基础配置与快速使用

  • 引入模块与基础配置通过 basicConfig() 函数快速配置全局日志参数:

    import logging
    
    logging.basicConfig(
        level=logging.DEBUG,  # 设置最低日志级别为 DEBUG
        format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
        datefmt='%Y-%m-%d %H:%M:%S',  # 时间格式
        filename='app.log',  # 输出到文件(默认追加模式)
        filemode='w'  # 覆盖模式写入文件(可选)
    )
    
  • 记录不同级别的日志使用预定义的日志级别方法输出信息:

    logging.debug('调试信息')    # 开发阶段追踪细节
    logging.info('常规状态')    # 程序正常运行信息
    logging.warning('潜在问题')  # 如参数缺失或兼容性问题
    logging.error('错误事件')    # 功能异常但程序仍运行
    logging.critical('严重故障') # 系统可能崩溃的致命错误
    

    注意:只有不低于 level 参数设置的级别才会被记录。

二、自定义 Logger 对象

  • 创建独立 Logger推荐为不同模块创建独立 Logger 以分类管理日志:

    logger = logging.getLogger('my_module')  # 名称建议使用模块名
    logger.setLevel(logging.INFO)  # 覆盖全局级别
    
  • 添加处理器(Handler)支持同时输出到控制台、文件、网络等多种目标:

    # 控制台处理器
    console_handler = logging.StreamHandler()
    console_handler.setLevel(logging.DEBUG)
    
    # 文件处理器(按大小轮转)
    from logging.handlers import RotatingFileHandler
    file_handler = RotatingFileHandler(
        'app.log', maxBytes=10*1024*1024, backupCount=5  # 10MB/文件,保留5个备份
    )
    file_handler.setLevel(logging.ERROR)
    
    # 将处理器附加到 Logger
    logger.addHandler(console_handler)
    logger.addHandler(file_handler)
    
  • 自定义日志格式通过 Formatter 定义日志输出样式:

    formatter = logging.Formatter(
        '%(asctime)s [%(levelname)s] %(module)s:%(lineno)d - %(message)s',
        datefmt='%H:%M:%S'
    )
    console_handler.setFormatter(formatter)
    file_handler.setFormatter(formatter)
    

三、高级用法

  • 配置文件管理使用 .conf 或 .ini 文件分离配置(推荐大型项目):

    import logging.config
    
    logging.config.fileConfig('logging.conf')
    

    示例 logging.conf 内容

    [loggers]
    keys=root,my_app
    
    [handlers]
    keys=consoleHandler,fileHandler
    
    [formatters]
    keys=simpleFormatter
    
    [logger_root]
    level=DEBUG
    handlers=consoleHandler
    
    [logger_my_app]
    level=INFO
    handlers=fileHandler
    qualname=my_app
    propagate=0  # 禁止传播到父级 Logger
    
  • 日志传播控制通过 propagate 属性控制是否向父级 Logger 传递日志:

    child_logger = logging.getLogger('parent.child')
    child_logger.propagate = False  # 仅当前 Logger 处理日志
    
  • 过滤器(Filter)实现精细化日志筛选:

    class KeywordFilter(logging.Filter):
        def __init__(self, keyword):
            super().__init__()
            self.keyword = keyword
    
        def filter(self, record):
            return self.keyword in record.getMessage()
    
    logger.addFilter(KeywordFilter('重要'))
    

四、最佳实践与注意事项

  • 性能优化

    • 避免高频日志调用:使用 isEnabledFor() 检查级别后再记录:
      if logger.isEnabledFor(logging.DEBUG):
          logger.debug(f'耗时计算: {expensive_function()}')
      
    • 使用异步日志库(如 concurrent-log-handler)处理高并发场景。
  • 多环境配置根据运行环境动态调整配置:

    if os.getenv('ENV') == 'production':
        logger.setLevel(logging.WARNING)
    else:
        logger.setLevel(logging.DEBUG)
    
  • 错误处理为关键操作添加异常捕获并记录堆栈:

    try:
        risky_operation()
    except Exception as e:
        logger.exception('操作失败: %s', e)  # 自动记录堆栈跟踪
    

五、实际应用场景示例

网络请求监控

import requests

def fetch_data(url):
    try:
        response = requests.get(url, timeout=5)
        response.raise_for_status()
        logger.info(f'成功获取 {url} 数据')
        return response.json()
    except requests.RequestException as e:
        logger.error(f'请求失败: {url} - {str(e)}')
        return None

通过合理配置 Logger、Handler 和 Formatter,可以构建灵活高效的日志系统。更多高级功能(如远程日志、邮件通知)可参考 Python 官方文档

总结

到此这篇关于python中logger包详细使用的文章就介绍到这了,更多相关python logger包使用教程内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Python开启线程和线程池的方法

    详解Python开启线程和线程池的方法

    这篇文章主要介绍了Python开启线程和线程池的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-03-03
  • python 爬虫之selenium可视化爬虫的实现

    python 爬虫之selenium可视化爬虫的实现

    这篇文章主要介绍了python 爬虫之selenium可视化爬虫的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Python 一键制作微信好友图片墙的方法

    Python 一键制作微信好友图片墙的方法

    这篇文章主要介绍了Python 一键制作微信好友图片墙的方法,有两种方法,每种方法给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05
  • 在不同系统间迁移Python程序的方法与教程

    在不同系统间迁移Python程序的方法与教程

    本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用Anaconda环境以及远程桌面连接和配置(作为临时方案),通过这些方法,可以有效地解决环境搭建和依赖安装问题
    2025-02-02
  • Django的开发步骤原来是这样的

    Django的开发步骤原来是这样的

    这篇文章主要为大家详细介绍了Django的开发步骤,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • matplotlib交互式数据光标mpldatacursor的实现

    matplotlib交互式数据光标mpldatacursor的实现

    这篇文章主要介绍了matplotlib交互式数据光标mpldatacursor的实现 ,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • Python调用系统底层API播放wav文件的方法

    Python调用系统底层API播放wav文件的方法

    这篇文章主要介绍了Python调用系统底层API播放wav文件的方法,涉及Python使用pywin32调用系统底层API读取与播放wav文件的相关操作技巧,需要的朋友可以参考下
    2017-08-08
  • 9种python web 程序的部署方式小结

    9种python web 程序的部署方式小结

    python有很多web 开发框架,代码写完了,部署上线是个大事,通常来说,web应用一般是三层结构web server ---->application -----> DB server
    2014-06-06
  • python编码总结(编码类型、格式、转码)

    python编码总结(编码类型、格式、转码)

    这篇文章主要介绍了python编码操作,包括编码类型、格式、转码等,并结合实例分析了相关操作技巧与注意事项,需要的朋友可以参考下
    2016-07-07
  • python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)

    python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)

    这篇文章主要介绍了python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08

最新评论