当我在IPython Notebook中运行以下命令时,看不到任何输出:
import logging
logging.basicConfig(level=logging.DEBUG)
logging.debug("test")
有人知道怎么做,这样我才能在笔记本中看到“测试”消息吗?
ipython3 notebook --version
返回1.0.0
当我在IPython Notebook中运行以下命令时,看不到任何输出:
import logging
logging.basicConfig(level=logging.DEBUG)
logging.debug("test")
有人知道怎么做,这样我才能在笔记本中看到“测试”消息吗?
ipython3 notebook --version
返回1.0.0
Answers:
请尝试以下操作:
import logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
logging.debug("test")
通过创建带有默认Formatter的StreamHandler并将其添加到根记录器,对记录系统进行基本配置。如果没有为根记录器定义处理程序,则debug(),info(),warning(),error()和critical()函数将自动调用basicConfig()。
如果根记录器已经为其配置了处理程序,则此功能不执行任何操作。
似乎ipython笔记本在某处调用basicConfig(或设置处理程序)。
logger
创建了根目录,否则它不会打印任何内容。
ipykernel
4.5(可能最早于4.4)中再次使用github.com/jupyter/notebook/issues/1397
如果仍要使用basicConfig
,请像这样重新加载日志记录模块
from importlib import reload # Not needed in Python 2
import logging
reload(logging)
logging.basicConfig(format='%(asctime)s %(levelname)s:%(message)s', level=logging.DEBUG, datefmt='%I:%M:%S')
reload
现在imp.reload
我的理解是IPython会话开始记录日志,因此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会话的情况下重新运行它,则会将重复的条目写入文件,因为现在将定义两个文件处理程序
您可以通过运行配置日志记录 %config Application.log_level="INFO"
有关更多信息,请参见IPython内核选项。
%config
查看支持的分类,Application
不是其中之一。ipython 7.9.0在这里。
我为这两个文件都设置了一个记录器,我希望它能显示在笔记本上。事实证明,添加文件处理程序会清除默认的流处理程序。
logger = logging.getLogger()
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# Setup file handler
fhandler = logging.FileHandler('my.log')
fhandler.setLevel(logging.DEBUG)
fhandler.setFormatter(formatter)
# Configure stream handler for the cells
chandler = logging.StreamHandler()
chandler.setLevel(logging.DEBUG)
chandler.setFormatter(formatter)
# Add both handlers
logger.addHandler(fhandler)
logger.addHandler(chandler)
logger.setLevel(logging.DEBUG)
# Show the handlers
logger.handlers
# Log Something
logger.info("Test info")
logger.debug("Test debug")
logger.error("Test error")