从IPython Notebook中的日志logging模块获取输出

当我在IPython Notebook中运行以下内容时,看不到任何输出:

import logging logging.basicConfig(level=logging.DEBUG) logging.debug("test") 

任何人都知道如何做到这一点,所以我可以看到笔记本内的“testing”消息?

尝试以下方法

 import logging logger = logging.getLogger() logger.setLevel(logging.DEBUG) logging.debug("test") 

根据logging.basicConfig :

通过使用默认格式化程序创buildStreamHandler并将其添加到根logging器来为日志logging系统进行基本configuration。 如果没有为根logging器定义处理程序,函数debug(),info(),warning(),error()和critical()将自动调用basicConfig()。

如果根logging器已经为它configuration了处理程序,则此函数不执行任何操作。

看起来像ipython笔记本电脑调用basicConfig(或设置处理程序)的地方。

如果你仍然想使用basicConfig ,像这样重新加载日志logging模块

 import logging reload(logging) logging.basicConfig(format='%(asctime)s %(levelname)s:%(message)s', level=logging.DEBUG, datefmt='%I:%M:%S') 

我的理解是,IPython会话启动日志logging,所以basicConfig不起作用。 这里是适合我的设置(我希望这不是那么粗俗,因为我想用它几乎所有的笔记本):

 import logging logger = logging.getLogger() fhandler = logging.FileHandler(filename='mylog.log', mode='a') formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') fhandler.setFormatter(formatter) logger.addHandler(fhandler) logger.setLevel(logging.DEBUG) 

现在当我运行:

 logging.error('hello!') logging.debug('This is a debug message') logging.info('this is an info message') logging.warning('tbllalfhldfhd, warning.') 

我在我的笔记本所在的目录中得到一个“mylog.log”文件,其中包含:

 2015-01-28 09:49:25,026 - root - ERROR - hello! 2015-01-28 09:49:25,028 - root - DEBUG - This is a debug message 2015-01-28 09:49:25,029 - root - INFO - this is an info message 2015-01-28 09:49:25,032 - root - WARNING - tbllalfhldfhd, warning. 

请注意,如果重新运行此操作而无需重新启动IPython会话,则会将重复条目写入文件,因为现在会定义两个文件处理程序

请记住,stderr是logging模块的默认stream,因此在IPython和Jupyter笔记本中,除非将streamconfiguration为stdout,否则可能看不到任何内容:

 import logging import sys logging.basicConfig(format='%(asctime)s | %(levelname)s : %(message)s', level=logging.INFO, stream=sys.stdout) logging.info('Hello world!') 

您可以通过运行%config Application.log_level="INFO"来configuration日志logging

有关更多信息,请参阅IPython内核选项