6

データ構造を表すクラスと GUI のクラスを持つ単純なアプリがあります。最初のクラス内でロガーを使用します。

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

GUI は、リストボックスを備えた 1 つの Tkinter ウィンドウで構成されています。

ログをリストボックスに送るにはどうすればよいですか? メッセージがコンソールやログ ファイルに表示されるのではなく、ログに記録されるので、メッセージがリストに表示されるようにしたいと考えています。

クラス内のメソッドの実行中にリストボックスを更新するにはどうすればよいですか?

4

1 に答える 1

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)

このようにして、構成からフォーマット、ログレベルなどを完全に制御できます。

于 2012-04-25T10:54:03.443 に答える