从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内核选项