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

如何修改FreeSimpleGUI中自定义Logger的输出格式?

解决自定义日志Handler的输出格式问题

你的问题核心是自定义的OutputHandler没有应用日志格式化规则,当前代码直接打印了日志记录对象(record),所以显示的是对象本身的原始信息而非格式化后的日志内容。下面是两种实用的解决方法:

方法一:给Handler绑定Formatter格式化器

通过给自定义Handler设置logging.Formatter,可以灵活定义日志的输出格式(比如包含时间、级别、日志内容等):

import FreeSimpleGUI as sg
import logging

class OutputHandler(logging.Handler):
    window: sg.Window

    def __init__(self, window: sg.Window):
        super().__init__()
        self.window = window

    def emit(self, record):
        # 用Handler自带的format方法处理日志记录
        formatted_msg = self.format(record)
        self.window["txtLog"].print(formatted_msg)


layout = [
    [sg.Multiline(default_text="", size=(100, 10), disabled=True, autoscroll=True, key="txtLog")]
]

window = sg.Window('Form', layout, finalize=True)

outHandler = OutputHandler(window)
# 定义日志格式,可根据需求调整字段
formatter = logging.Formatter('%(asctime)s | %(levelname)s | %(message)s')
outHandler.setFormatter(formatter)

log = logging.getLogger("root")
log.setLevel(logging.INFO)
log.addHandler(outHandler)


i = 0

while True:
   event, values = window.read(timeout = 1000, timeout_key=sg.TIMEOUT_KEY, close=False)
   if event == sg.WIN_CLOSED or event == 'Exit':
      break
   logging.info("Hello World " + str(i))
   i += 1

window.close()

方法二:在emit方法中手动格式化(适用于简单场景)

如果不需要复杂的格式规则,也可以直接在emit方法里拼接需要的日志字段:

def emit(self, record):
    # 手动拼接格式,示例仅显示级别和消息内容
    formatted_msg = f"[{record.levelname}] {record.getMessage()}"
    self.window["txtLog"].print(formatted_msg)

关于自定义Logger的补充说明

如果你的“自定义Logger”指的是独立于root的Logger(比如logging.getLogger("my_app_logger")),只需做到以下几点就能让它遵循格式:

  • 给自定义Logger设置日志级别(默认会继承root的级别)
  • 将outHandler添加到该自定义Logger上
  • 确保Handler已绑定Formatter

示例代码:

my_logger = logging.getLogger("my_app_logger")
my_logger.setLevel(logging.INFO)
my_logger.addHandler(outHandler)
# 使用自定义Logger输出日志
my_logger.info("这是自定义Logger的格式化日志")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 09:41:02