python - 在 Jupyter Notebook 中以正确的顺序获取日志输出和标准输出

标签 python logging jupyter-notebook

logging 在 Jupyter Notebook 中输出乱序,这里是一个例子。

普通 ipython session :

In [1]: import logging                                                          

In [2]: for i in range(5): 
   ...:   print(i) 
   ...:   if i == 3: 
   ...:     logging.critical("critical") 
   ...:                                                                         
0
1
2
3
CRITICAL:root:critical
4

In [3]:           

但在 Jupyter Notebook 中,输出是乱序的:

enter image description here

logging 输出在其他所有内容之前打印。这使得调试变得不可能,因为人们会丢失任何指示 logging 语句发生的位置。

任何日志记录级别都会发生这种情况。

我怎样才能以正确的顺序获得输出,而不是 logging 输出有自己的特殊位置?

最佳答案

您可以通过将 stream 设置为 sys.stdout 来解决这个问题。我猜这将消除对 Jupyter Notebook 中记录消息的任何特殊处理。

import logging
import sys
logging.basicConfig(stream=sys.stdout)

enter image description here

关于python - 在 Jupyter Notebook 中以正确的顺序获取日志输出和标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61307831/

相关文章:

python用零填充小数

python - 将 linux sha512 影子转换为十六进制

python - 如何解决 Jupyter Notebook 中的错误?

java - 使用拦截器记录REST服务但无法记录请求和响应

java - 将项目从 log4j 迁移到 slf4j+log4j

python - Jupyter Notebook "image"输出与 Pycharm

ipython - IPython Notebook中的while循环的优美中断

python - 在 __init__ 中使用 python 属性?

python - KeyboardInterrupt 在 ipython 下的 Python 2.7 中不可预测,我怎样才能让它 *always* 中止当前评估?

java - 如何在 Java 中更轻松地搜索日志中的错误?