Enthought Canopy& IPython QtConsole忽略logging.basicConfig

时间:2014-05-22 16:24:35

标签: python-2.7 logging enthought

在Mac(Mavericks)上使用Enthought Canopy v1.4,即使日志记录级别为DEBUG,也会忽略调试或信息的日志记录语句。 PyLab后端设置为Interactive(Qt4)。这是一个示例及其输出:

import logging

logging.basicConfig(level=logging.DEBUG)

logging.debug('variable is nil')
logging.info('hey! listen!')
logging.warning('watch out!')
logging.error('an error happened')
logging.critical('a critical event happened')

将登录到Canopy的“交互式数据分析环境”内置控制台:

WARNING:root:watch out!
ERROR:root:an error happened
CRITICAL:root:a critical event happened

在终端中运行它将忽略调试/信息并在那里输出。有趣的是,将logging.basicConfig设置为使用日志文件然后在终端中运行将不会忽略调试/信息。

我可以解决这个问题,但是有解决方案吗?

2 个答案:

答案 0 :(得分:2)

有趣。 Canopy的IPython shell是一个“IPython Qtconsole”,你所看到的是QtConsole的正常行为。要查看此内容,请使用ipython qtconsole

从终端打开标准(非Canopy)Qtconsole

然后在此Qtconsole中,键入logging.root.handlers。您将看到根记录器已配置了一个处理程序。

https://docs.python.org/2/library/logging.html#logging.basicConfig所述,这会导致便利功能basicConfig无效。

相比之下,简单的IPython终端会话中的相同序列显示根记录器最初未配置任何处理程序。我不知道造成这种差异的原因。

但是,凭借这些知识,您可以使用以下方法轻松更改根记录器的级别:

logging.root.level = logging.DEBUG

答案 1 :(得分:0)

(对初始问题的回复,其中不包括代码片段中的basicConfig): 这是Python中的预期行为。 https://docs.python.org/2/library/logging.html#logger-objects

  

请注意,根记录器的创建级别为WARNING。