通过IPython笔记本运行时,python日志默认存储在哪里?

use*_*117 5 python-2.7 ipython-notebook

在一个IPython笔记本单元格中,我写道:

import logging
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
handler = logging.FileHandler('model.log')
handler.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
Run Code Online (Sandbox Code Playgroud)

请注意,我提供的是文件名,但不是路径.

我在哪里可以找到该日志?(跑了'找'并找不到它......)

fam*_*kin 7

有多种方法可以设置IPython工作目录.如果您未在IPython配置文件/配置,环境或笔记本中设置任何内容,则日志应位于您的工作目录中.还尝试$ ipython locate打印默认的IPython目录路径,日志可能就在那里.

怎么样给它一个绝对的文件路径,看看它是否有效?

除此之外,调用logging.basicConfig似乎在IPython笔记本中没有做任何事情:

# In:
import logging
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger()
logger.debug('root debug test')
Run Code Online (Sandbox Code Playgroud)

没有输出.

根据文档,logging.basicConfig如果根记录器已经为其配置了处理程序,则不会执行任何操作.这似乎是这种情况,IPython显然已经设置了根记录器.我们可以确认一下:

# In:
import logging
logger = logging.getLogger()
logger.handlers

# Out:
[<logging.StreamHandler at 0x106fa19d0>]
Run Code Online (Sandbox Code Playgroud)

所以我们可以尝试手动设置根记录器级别:

import logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
logger.debug('root debug test')
Run Code Online (Sandbox Code Playgroud)

这会在笔记本中产生格式化的输出:

在此输入图像描述

现在设置文件记录器:

# In:
import logging

# set root logger level
root_logger = logging.getLogger()
root_logger.setLevel(logging.DEBUG)

# setup custom logger
logger = logging.getLogger(__name__)
handler = logging.FileHandler('model.log')
handler.setLevel(logging.INFO)
logger.addHandler(handler)

# log
logger.info('test info my')
Run Code Online (Sandbox Code Playgroud)

这导致将输出写入笔记本和model.log文件,这对我来说位于我启动IPython和笔记本的目录中.

请注意,重复调用此段代码而不重新启动IPython内核将导致在每次运行时创建并将另一个处理程序附加到记录器,并且每次日志调用时记录到文件的消息数将增加.