169

IPython Notebook 内で次を実行すると、出力が表示されません。

import logging
logging.basicConfig(level=logging.DEBUG)
logging.debug("test")

ノートブック内に「テスト」メッセージが表示されるようにする方法を知っている人はいますか?

4

9 に答える 9

169

以下を試してください:

import logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
logging.debug("test")

logging.basicConfigによると:

デフォルトの Formatter を使用して StreamHandler を作成し、それをルート ロガーに追加することで、ロギング システムの基本的な構成を行います。関数 debug()、info()、warning()、error()、および critical() は、ルート ロガーに対してハンドラが定義されていない場合、basicConfig() を自動的に呼び出します。

ルートロガーにすでにハンドラーが構成されている場合、この関数は何もしません。

どこかでipythonノートブックがbasicConfig(またはset handler)を呼び出すようです。

于 2013-09-15T04:55:39.240 に答える
80

それでも を使用したい場合は、次basicConfigのようにロギング モジュールをリロードします

from importlib import reload  # Not needed in Python 2
import logging
reload(logging)
logging.basicConfig(format='%(asctime)s %(levelname)s:%(message)s', level=logging.DEBUG, datefmt='%I:%M:%S')
于 2014-01-31T08:17:30.947 に答える
37

私の理解では、IPython セッションがロギングを開始するため、basicConfig は機能しません。これが私にとってうまくいくセットアップです(ほとんどすべてのノートブックで使用したいので、これがそれほど見栄えが悪くなければいいのにと思います):

import logging
logger = logging.getLogger()
fhandler = logging.FileHandler(filename='mylog.log', mode='a')
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fhandler.setFormatter(formatter)
logger.addHandler(fhandler)
logger.setLevel(logging.DEBUG)

今私が実行すると:

logging.error('hello!')
logging.debug('This is a debug message')
logging.info('this is an info message')
logging.warning('tbllalfhldfhd, warning.')

ノートブックと同じディレクトリに「mylog.log」ファイルがあり、次のものが含まれています。

2015-01-28 09:49:25,026 - root - ERROR - hello!
2015-01-28 09:49:25,028 - root - DEBUG - This is a debug message
2015-01-28 09:49:25,029 - root - INFO - this is an info message
2015-01-28 09:49:25,032 - root - WARNING - tbllalfhldfhd, warning.

IPython セッションを再起動せずにこれを再実行すると、2 つのファイル ハンドラーが定義されているため、ファイルに重複したエントリが書き込まれることに注意してください。

于 2015-01-28T14:56:38.240 に答える
25

stderr はloggingモジュールのデフォルト ストリームであるため、IPython および Jupyter ノートブックでは、ストリームを stdout に構成しない限り、何も表示されない可能性があることに注意してください。

import logging
import sys

logging.basicConfig(format='%(asctime)s | %(levelname)s : %(message)s',
                     level=logging.INFO, stream=sys.stdout)

logging.info('Hello world!')
于 2016-12-09T12:10:41.890 に答える
17

What worked for me now (Jupyter, notebook server is: 5.4.1, IPython 7.0.1)

import logging
logging.basicConfig()
logger = logging.getLogger('Something')
logger.setLevel(logging.DEBUG)

Now I can use logger to print info, otherwise I would see only message from the default level (logging.WARNING) or above.

于 2018-10-21T14:43:16.060 に答える
4

両方のファイルのロガーをセットアップし、ノートブックに表示したかったのです。ファイルハンドラーを追加すると、デフォルトのストリームハンドラーがクリアされることがわかりました。

logger = logging.getLogger()

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# Setup file handler
fhandler  = logging.FileHandler('my.log')
fhandler.setLevel(logging.DEBUG)
fhandler.setFormatter(formatter)

# Configure stream handler for the cells
chandler = logging.StreamHandler()
chandler.setLevel(logging.DEBUG)
chandler.setFormatter(formatter)

# Add both handlers
logger.addHandler(fhandler)
logger.addHandler(chandler)
logger.setLevel(logging.DEBUG)

# Show the handlers
logger.handlers

# Log Something
logger.info("Test info")
logger.debug("Test debug")
logger.error("Test error")
于 2019-02-14T01:17:27.453 に答える