我有一个简单的应用程序,其中一个类表示数据结构,一个类用于GUI。我在第一堂课中使用了一个记录器:
class A(object):
def __init__(self):
self.logger = logging.getLogger(self.__class__.__name__)
self.logger.info('creating new A object')
等
GUI包含一个带有列表框的Tkinter窗口。
如何将日志定向到列表框?我希望看到消息填充列表,因为它们被记录而不是显示在控制台或日志文件中。
如果在执行类中的方法时如何更新列表框?
答案 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)
通过这种方式,您可以完全控制配置中的格式,日志级别等。