IPython Notebook内で次のコマンドを実行すると、出力が表示されません。
import logging
logging.basicConfig(level=logging.DEBUG)
logging.debug("test")
ノートブック内の「テスト」メッセージを見ることができるように、誰でもそれを作成する方法を知っていますか?
ipython3 notebook --version
が復帰1.0.0
IPython Notebook内で次のコマンドを実行すると、出力が表示されません。
import logging
logging.basicConfig(level=logging.DEBUG)
logging.debug("test")
ノートブック内の「テスト」メッセージを見ることができるように、誰でもそれを作成する方法を知っていますか?
ipython3 notebook --version
が復帰1.0.0
回答:
以下を試してください:
import logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
logging.debug("test")
デフォルトのフォーマッターを使用してStreamHandlerを作成し、それをルートロガーに追加することにより、ロギングシステムの基本的な構成を行います。ルートロガーにハンドラーが定義されていない場合、関数debug()、info()、warning()、error()、critical()はbasicConfig()を自動的に呼び出します。
ルートロガーにすでにハンドラーが設定されている場合、この関数は何もしません。
どこかでipythonノートブックがbasicConfig(またはsetハンドラー)を呼び出すようです。
logger
。ルートが作成されない限り、何も出力されません。
ipykernel
4.5(おそらく早くとも4.4)で再び動作しますgithub.com/jupyter/notebook/issues/1397
それでも使用したい場合は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')
reload
今すぐimp.reload
私の理解では、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つのファイルハンドラーが定義されるため、重複したエントリがファイルに書き込まれることに注意してください。
今私のために働いたもの(Jupyter、ノートブックサーバーは:5.4.1、IPython 7.0.1)
import logging
logging.basicConfig()
logger = logging.getLogger('Something')
logger.setLevel(logging.DEBUG)
ロガーを使用して情報を印刷できるようになりました。それ以外の場合は、デフォルトレベル(logging.WARNING
)以上のメッセージのみが表示されます。
basicConfig()
それを動作させるtpは。
実行することでロギングを設定できます %config Application.log_level="INFO"
詳細については、IPythonカーネルオプションを参照してください。
%config
サポートされているクラスを確認するために実行しますが、Application
それらの1つではありません。ipython 7.9.0はこちら。
ロガーを両方のファイル用にセットアップし、ノートブックに表示したかったのです。ファイルハンドラーを追加すると、デフォルトのストリームハンドラーが消去されます。
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")