在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)

请注意,我提供的是文件名,而不是路径。

我在哪里可以找到该日志? (运行了“查找”,但找不到它...)

最佳答案

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

给它一个绝对的文件路径以查看它是否可以工作呢?

除此之外,对logging.basicConfig的调用在IPython笔记本中似乎没有任何作用:

# In:
import logging
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger()
logger.debug('root debug test')

没有输出。

根据文档,如果root记录器已经为其配置了处理程序,则 logging.basicConfig 不会执行任何操作。似乎是这样,IPython显然已经设置了root logger。我们可以确认一下:
# In:
import logging
logger = logging.getLogger()
logger.handlers

# Out:
[<logging.StreamHandler at 0x106fa19d0>]

因此,我们可以尝试手动设置root记录器级别:
import logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
logger.debug('root debug test')

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

现在开始设置文件记录器:
# 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')

这导致将输出写入笔记本和model.log文件,对我而言,该文件位于我从中启动IPython和Notebook的目录中。

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

关于python-2.7 - 通过IPython Notebook运行时,默认情况下python日志存储在哪里?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24722240/

10-16 16:19