Pythonlogging模块使用示例详解

作者:

文章目录
  • 替代 print:print 语句仅适合简单调试,而 logging 支持持久化、级别控制、异步写入等。 分级日志:根据重要性区分日志(如 DEBUG、INFO、ERROR),便于过滤信息。 灵活输出:可同时输出到控制台、文件、网络等。 线程安全:适用于多线程/多进程环境。
  • Logger(记录器)应用程序直接调用的接口,负责产生日志。 通过 logging.getLogger(name) 获取或创建 Logger 实例。 支持层级结构(如 'parent.child' 继承父级配置)。 Handler(处理器)决定日志的输出位置(如控制台、文件、邮件等)。 常用 Handler: StreamHandler:输出到流(如控制台)。 FileHandler:输出到文件。 RotatingFileHandler:按大小滚动日志文件。 TimedRotatingFileHandler:按时间滚动日志文件。 SMTPHandler:发送邮件。 Filter(过滤器)提供更细粒度的日志过滤(如仅记录特定关键词的日志)。 Formatter(格式器)定义日志的输出格式(时间、级别、消息等)。 常用格式字段: ‘%(asctime)s – %(name)s – %(levelname)s – %(message)s’
  • 从低到高共 6 个级别(低于设定级别的日志将被忽略): 级别 数值 说明 DEBUG 10 详细调试信息 INFO 20 程序正常运行信息 WARNING 30 潜在问题,但程序仍运行 ERROR 40 严重错误,影响部分功能 CRITICAL 50 致命错误,可能导致程序终止
  • 创建 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 – %(levelname)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(‘请求超时’)
  • 适用于简单场景的快速配置: import logging logging.basicConfig( level=logging.INFO, format=’%(asctime)s – %(levelname)s – %(message)s’, handlers=[ logging.FileHandler(‘app.log’), logging.StreamHandler() ] ) 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()}’)
  • logging 模块通过灵活的配置和分级机制,满足了从简单到复杂的日志需求。掌握其核心组件(Logger、Handler、Formatter)和级别控制,能显著提升程序的可维护性。建议在项目中替代 print,合理利用日志进行调试和监控。 到此这篇关于Python logging模块使用示例详解的文章就介绍到这了,更多相关Python logging模块使用内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: python使用logging模块记录日志的操作 Python中日志模块logging的使用技巧和应用详解 Python中的Logging模块在项目应用小结 python日志模块logging案例详解 Python使用logging实现多进程安全的日志模块 Python中的logging模块详解 Python logging日志模块使用指南 一文详解Python中logging模块的用法 python打印日志方法的使用教程(logging模块)
  • 目录
    • 一、为什么使用 logging 模块?
    • 二、核心组件
    • 三、日志级别
    • 四、基本使用步骤
    • 五、快速配置(basicConfig)
    • 六、高级用法
    • 七、常见问题
    • 八、总结

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

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

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

    • 通过 logging.getLogger(name) 获取或创建 Logger 实例。
    • 支持层级结构(如 'parent.child' 继承父级配置)。

    Handler(处理器)
    决定日志的输出位置(如控制台、文件、邮件等)。

    • 常用 Handler:
      • StreamHandler:输出到流(如控制台)。
      • FileHandler:输出到文件。
      • RotatingFileHandler:按大小滚动日志文件。
      • TimedRotatingFileHandler:按时间滚动日志文件。
      • SMTPHandler:发送邮件。

    Filter(过滤器)
    提供更细粒度的日志过滤(如仅记录特定关键词的日志)。

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

    常用格式字段:

    '%(asctime)s - %(name)s - %(levelname)s - %(message)s'

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

    级别 数值 说明
    DEBUG 10 详细调试信息
    INFO 20 程序正常运行信息
    WARNING 30 潜在问题,但程序仍运行
    ERROR 40 严重错误,影响部分功能
    CRITICAL 50 致命错误,可能导致程序终止

    创建 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 - %(levelname)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('请求超时')

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

    import logging
    logging.basicConfig(
        level=logging.INFO,
        format='%(asctime)s - %(levelname)s - %(message)s',
        handlers=[
            logging.FileHandler('app.log'),
            logging.StreamHandler()
        ]
    )
    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()}')

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

    到此这篇关于Python logging模块使用示例详解的文章就介绍到这了,更多相关Python logging模块使用内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

    您可能感兴趣的文章:

    • python使用logging模块记录日志的操作
    • Python中日志模块logging的使用技巧和应用详解
    • Python中的Logging模块在项目应用小结
    • python日志模块logging案例详解
    • Python使用logging实现多进程安全的日志模块
    • Python中的logging模块详解
    • Python logging日志模块使用指南
    • 一文详解Python中logging模块的用法
    • python打印日志方法的使用教程(logging模块)

    站内搜索