非表示 - IPythonノートブックのロギングモジュールから出力を取得する




jupyter マジックコマンド (4)

私がIPython Notebookの中で以下を実行すると、出力が表示されません。

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

ノートブックの中に「テスト」メッセージが表示されるように、誰でもその方法を知っていますか?


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!')

%config Application.log_level="INFO"実行すると、ログを構成できます。Application.log_level %config Application.log_level="INFO"

詳細については、「 IPythonカーネルオプション 」を参照してください。


以下を試してください:

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

logging.basicConfigよると:

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

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

それはどこかのipythonノートブックの呼び出しbasicConfig(またはハンドラを設定)のようです。


私の理解は、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つのファイルハンドラが定義されているので、ファイルに重複エントリが書き込まれることに注意してください





ipython-notebook