IPython Notebook 内で次を実行すると、出力が表示されません。
import logging
logging.basicConfig(level=logging.DEBUG)
logging.debug("test")
ノートブック内に「テスト」メッセージが表示されるようにする方法を知っている人はいますか?
IPython Notebook 内で次を実行すると、出力が表示されません。
import logging
logging.basicConfig(level=logging.DEBUG)
logging.debug("test")
ノートブック内に「テスト」メッセージが表示されるようにする方法を知っている人はいますか?
以下を試してください:
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)を呼び出すようです。
それでも を使用したい場合は、次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')
私の理解では、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 つのファイル ハンドラーが定義されているため、ファイルに重複したエントリが書き込まれることに注意してください。
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!')
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.
両方のファイルのロガーをセットアップし、ノートブックに表示したかったのです。ファイルハンドラーを追加すると、デフォルトのストリームハンドラーがクリアされることがわかりました。
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")