一、Handler(处理程序)是什么?

  • Handler 是 Python logging 模块中的“处理程序”,用于决定日志输出到哪里(如控制台、文件、网络等)。
  • 一个 logger 可以有多个 Handler,每个 Handler 可以有不同的输出目标、日志级别和格式。

二、常用 Handler 类型

Handler 类名 作用说明
StreamHandler 输出到控制台(标准输出)
FileHandler 输出到文件

三、Handler 的常用方法

1. setLevel(level)

  • 作用:设置该 Handler 处理的最低日志级别。只有大于等于该级别的日志才会被该 Handler 处理。
  • 示例
    sh.setLevel(logging.INFO)
    

2. setFormatter(formatter)

  • 作用:为 Handler 设置日志格式(Formatter)。
  • 示例
    formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
    sh.setFormatter(formatter)
    

四、你的代码详解

import logging

logger = logging.getLogger()         # 获取根记录器
logger.setLevel(logging.DEBUG)       # 设置记录器的日志级别为DEBUG
sh = logging.StreamHandler()         # 创建一个控制台输出的处理程序

logger.addHandler(sh)                # 将处理程序添加到记录器

logger.debug()

解释

  1. logger = logging.getLogger()

    • 获取根记录器(root logger)。
  2. logger.setLevel(logging.DEBUG)

    • 设置 logger 的日志级别为 DEBUG,表示 DEBUG 及以上级别的日志都会被处理。
  3. sh = logging.StreamHandler()

    • 创建一个StreamHandler,用于将日志输出到控制台(标准输出)。
  4. logger.addHandler(sh)

    • 将 StreamHandler 添加到 logger。此后,logger 产生的日志会通过 sh 输出到控制台。
  5. logger.debug()

    • 这里缺少参数,应传入日志内容,如 logger.debug('调试信息')
    • 正确写法:
      logger.debug('调试信息')
      

五、完整示例(含格式化)

import logging

logger = logging.getLogger()
logger.setLevel(logging.DEBUG)

# 创建控制台Handler
sh = logging.StreamHandler()
sh.setLevel(logging.INFO)  # 只显示INFO及以上日志

# 设置格式
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
sh.setFormatter(formatter)

logger.addHandler(sh)

logger.debug('调试信息')    # 不会显示(因为sh的级别是INFO)
logger.info('普通信息')     # 会显示
logger.warning('警告信息')  # 会显示

六、总结

  • Handler 决定日志输出目标(如控制台、文件)。
  • setLevel 控制 Handler 处理的最低日志级别。
  • setFormatter 设置日志输出格式。
  • 你可以为 logger 添加多个 Handler,实现多元化日志输出。
  • 日志方法(如 logger.debug())必须传入日志内容。
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐