在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
设置为使用日志文件然后在终端中运行将不会忽略调试/信息。
我可以解决这个问题,但是有解决方案吗?
答案 0 :(得分:2)
有趣。 Canopy的IPython shell是一个“IPython Qtconsole”,你所看到的是QtConsole的正常行为。要查看此内容,请使用ipython 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。