如何将python logger指向Tkinker的Listbox?

时间:2012-04-25 08:08:51

标签: python logging tkinter

我有一个简单的应用程序,其中一个类表示数据结构,一个类用于GUI。我在第一堂课中使用了一个记录器:

class A(object):
    def __init__(self):
        self.logger = logging.getLogger(self.__class__.__name__)
        self.logger.info('creating new A object')

GUI包含一个带有列表框的Tkinter窗口。

如何将日志定向到列表框?我希望看到消息填充列表,因为它们被记录而不是显示在控制台或日志文件中。

如果在执行类中的方法时如何更新列表框?

1 个答案:

答案 0 :(得分:5)

在这种情况下,最好实现自己的logging.Handler:

from logging import Handler, getLogger

class ListboxHandler(Handler):
    def __init__(self, box):
        self._box = box
        Handler.__init__(self)

    def emit(self, record):
        r = self.format(record)
        self._box.insert(0, r)

# quick test:
target = [] # supports insert like Listbox :)
rootLogger = getLogger()
# add handler to the root logger here
# should be done in the config...
rootLogger.addHandler(ListboxHandler(target))
rootLogger.warn('test')
print(target)

通过这种方式,您可以完全控制配置中的格式,日志级别等。