You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义Python logging.Handler输出至SimpleGUI多行控件报错排查

自定义logging.Handler时'level'属性缺失问题的解决

问题根源

自定义logging.Handler子类时,必须调用父类logging.Handler的__init__方法。因为Handler基类会初始化level、filters、formatter等核心属性,若跳过这一步,这些属性不会被创建,当logging框架内部尝试访问level时就会抛出AttributeError。

你之前在emit()里只用print()时没报错,是因为这种写法没有触发框架对level属性的校验,但这属于不规范的实现,后续拓展功能时必然会出问题。

错误示例(你的原代码大概是这样)

import logging

class OutputHandler(logging.Handler):
    def emit(self, record):
        # 用print时未触发框架的level检查,暂时正常
        print(record.getMessage())

修正后的代码

import logging

class OutputHandler(logging.Handler):
    def __init__(self, level=logging.NOTSET):
        # 必须调用父类初始化方法,完成核心属性的创建
        super().__init__(level)
    
    def emit(self, record):
        # 这里替换为你的GUI更新逻辑,比如写入文本框
        formatted_log = self.format(record)
        print(formatted_log)  # 示例打印,实际改成GUI操作

补充说明

  • 如果不需要自定义初始日志级别,也可以直接写super().__init__(),默认使用logging.NOTSET,后续通过handler.setLevel(logging.INFO)来调整级别。
  • emit()方法里调用self.format(record)是规范写法,会自动应用你设置的日志格式化器,让日志输出符合预期格式。

内容的提问来源于stack exchange,提问作者Christian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 12:52:04