0

ログエントリを文字列にキャプチャして、wx ダイアログに表示したいと考えています。ログエントリで StringIO を埋めることができません...ここで何が問題なのですか?

# prepare logging
log = StringIO.StringIO('Report')
logger = logging.getLogger (__name__)
logger.setLevel(logging.DEBUG)
handler = logging.StreamHandler(log)
logger.addHandler(handler)
# do something and log it
logging.info('Some log entry')
# display log
handler.flush()
dlg = wx.lib.dialogs.ScrolledMessageDialog(window, log.getvalue(), "Import Report")
dlg.ShowModal()
log.close()

ダイアログには最初の StringIO コンテンツ (「レポート」) が表示されますが、ログを介して何も追加されません (「いくつかのログ エントリ」)。

私は悟りもなしにこれを見て、直観もせずにログのチュートリアルを読んだので、ここに戻ってきました。

指摘してくれてありがとう、のび

4

1 に答える 1

1
logger = logging.getLogger (__name__)

に名前を渡しているgetLoggerため、指定された名前のロガーが提供されます (ルート ロガーの代わりに、これは後で重要になります)。

logging.info('Some log entry')

logging.infoを呼び出しています (注: logger.infoとは大きく異なります)。 logging.infoルート ロガーにログを記録します。これはあなたとは異なるエンティティですlogger

その呼び出しを切り替えるか、文字列を渡さずlogger.info('Some log entry')にルートロガーを取得します。logging.getLogger()

これを読み返してみると、「ロガー」という単語をほぼ同じ数のコンテキストで約 60 回使用したので、これが紛らわしい場合は明確にすることができます。

于 2014-03-26T21:45:24.137 に答える