Jupyter Notebook 不会将日志打印到输出单元

新手上路,请多包涵

我目前正在使用 Jupyter 笔记本,我想强制它打印出 Python 日志到输出单元格。

我正在使用以前以这种方式工作的旧笔记本,可能是旧版本的 Jupyter 笔记本。

我将日志记录设置为:

 import logging
logging.basicConfig(format='%(levelname)s : %(message)s', level=logging.INFO)
logging.root.level = 20

但是当我打电话时:

 logging.info("hello world")

它不会在输出单元格中打印任何内容。它只是打印出我启动 Jupyter 笔记本的控制台中的内容。

我正在使用 python 2.7.10 在我的虚拟环境中安装的包是:

 appnope==0.1.0
backports-abc==0.4
backports.ssl-match-hostname==3.5.0.1
certifi==2016.2.28
decorator==4.0.9
functools32==3.2.3.post2
gnureadline==6.3.3
ipykernel==4.3.1
ipython==4.1.2
ipython-genutils==0.1.0
ipywidgets==4.1.1
Jinja2==2.8
jsonschema==2.5.1
jupyter==1.0.0
jupyter-client==4.2.2
jupyter-console==4.1.1
jupyter-core==4.1.0
MarkupSafe==0.23
mistune==0.7.2
nbconvert==4.1.0
nbformat==4.0.1
notebook==4.1.0
path.py==8.1.2
pexpect==4.0.1
pickleshare==0.6
ptyprocess==0.5.1
Pygments==2.1.3
pyzmq==15.2.0
qtconsole==4.2.0
simplegeneric==0.8.1
singledispatch==3.4.0.3
six==1.10.0
terminado==0.6
tornado==4.3
traitlets==4.1.0
wheel==0.24.0

单元格中的日志打印输出是否已更改?有什么方法可以强制 Jupyter 将日志记录写入输出单元?

原文由 ziky90 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.5k
2 个回答

我找到了一个我的旧 python 2.7.10 virtualenv,其中 jupyter 按需要工作。

 appnope==0.1.0
backports.ssl-match-hostname==3.4.0.2
boto==2.38.0
bz2file==0.98
certifi==2015.9.6.2
decorator==4.0.4
functools32==3.2.3.post2
gensim==0.12.2
gnureadline==6.3.3
httpretty==0.8.6
ipykernel==4.1.1
ipython==4.0.0
ipython-genutils==0.1.0
ipywidgets==4.1.1
Jinja2==2.8
jsonschema==2.5.1
jupyter==1.0.0
jupyter-client==4.1.1
jupyter-console==4.0.3
jupyter-core==4.0.6
MarkupSafe==0.23
mistune==0.7.1
nbconvert==4.1.0
nbformat==4.0.1
notebook==4.0.6
numpy==1.10.1
path.py==8.1.2
Pattern==2.6
pexpect==4.0.1
pickleshare==0.5
ptyprocess==0.5
Pygments==2.0.2
pyzmq==14.7.0
qtconsole==4.1.0
requests==2.8.1
scipy==0.16.0
simplegeneric==0.8.1
six==1.10.0
smart-open==1.3.0
terminado==0.5
tornado==4.2.1
traitlets==4.0.0
wheel==0.24.0

有些包与这里的 jupyter 问题无关,问题可能出在一些相关包的版本中。我会尝试进一步调查到底在哪里。

编辑:

At the end I have found that the problem is in the package: ipykernel==4.3.1 or since ipykernel==4.3.0 everything works fine with ipykernel==4.1.1 or ipykernel==4.2.2 .

在 github 上向 jupyter 和 ipykernel 报告了问题: https ://github.com/ipython/ipykernel/issues/111

原文由 ziky90 发布,翻译遵循 CC BY-SA 3.0 许可协议

较早的答案似乎不再有效。最完整的一个不再起作用,因为没有默认处理程序,因此修改 zeroeth 不起作用。此外,在笔记本中运行时,与根记录器打交道似乎可能会令人担忧。

为了让 "foo" 记录器将其输出放入单元格中,您可以执行以下操作:

 logger = logging.getLogger("foo")
logger.addHandler(logging.StreamHandler(stream=sys.stdout))

所以自己添加处理程序,并定向其输出。

原文由 Robert P. Goldman 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题