StringIO捕获日志,但未写入
我想把日志信息保存到一个字符串里,以便在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内容('报告'),但是通过日志添加的内容('一些日志条目')却没有显示出来。
我看过这个链接,但没有找到解决办法,也看过一些日志的教程,还是没头绪,所以我来这里求助。
谢谢大家的指点,nobi
1 个回答
1
logger = logging.getLogger (__name__)
你传递了一个名字给 getLogger
,所以它给你返回了一个带有指定名字的日志记录器(logger),而不是根日志记录器。这一点后面会很重要。
logging.info('Some log entry')
你在调用 logging.info(注意:这和 logger.info 是完全不同的)。logging.info
是记录到根日志记录器的,这和你的 logger
是不同的东西。
你可以把这个调用改成 logger.info('一些日志信息')
,或者直接通过不传字符串给 logging.getLogger()
来获取根日志记录器。
回头看我刚才用了“logger”这个词大约60次,而且是在差不多同样的上下文中,所以如果这让你感到困惑,我可以再解释一下。