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)
请注意,我提供的是文件名,但不是路径.
我在哪里可以找到该日志?(跑了'找'并找不到它......)
有多种方法可以设置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内核将导致在每次运行时创建并将另一个处理程序附加到记录器,并且每次日志调用时记录到文件的消息数将增加.
| 归档时间: |
|
| 查看次数: |
6416 次 |
| 最近记录: |