私はPythonのログを使用していくつかの問題を抱えています。 main.pyとmymodule.pyという2つのファイルがあります。一般に、main.pyが実行され、mymodule.pyをインポートし、そこからいくつかの関数を使用します。しかし、時々mymodule.pyを直接実行します。pythonのログ - 子にメッセージが表示されない
ロギングが1つの場所にのみ設定されるようにしようとしましたが、何かが間違っているようです。
ここにコードがあります。
# main.py
import logging
import mymodule
logger = logging.getLogger(__name__)
def setup_logging():
# only cofnigure logger if script is main module
# configuring logger in multiple places is bad
# only top-level module should configure logger
if not len(logger.handlers):
logger.setLevel(logging.DEBUG)
# create console handler with a higher log level
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(levelname)s: %(asctime)s %(funcName)s(%(lineno)d) -- %(message)s', datefmt = '%Y-%m-%d %H:%M:%S')
ch.setFormatter(formatter)
logger.addHandler(ch)
if __name__ == '__main__':
setup_logging()
logger.info('calling mymodule.myfunc()')
mymodule.myfunc()
とインポートされたモジュール:
# mymodule.py
import logging
logger = logging.getLogger(__name__)
def myfunc():
msg = 'myfunc is being called'
logger.info(msg)
print('done with myfunc')
if __name__ == '__main__':
# only cofnigure logger if script is main module
# configuring logger in multiple places is bad
# only top-level module should configure logger
if not len(logger.handlers):
logger.setLevel(logging.DEBUG)
# create console handler with a higher log level
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(levelname)s: %(asctime)s %(funcName)s(%(lineno)d) -- %(message)s', datefmt = '%Y-%m-%d %H:%M:%S')
ch.setFormatter(formatter)
logger.addHandler(ch)
logger.info('myfunc was executed directly')
myfunc()
私は、コードを実行すると、私はこの出力を参照してください。
$>python main.py
INFO: 2016-07-14 18:13:04 <module>(22) -- calling mymodule.myfunc()
done with myfunc
をしかし、私はこれを参照することを期待:
$>python main.py
INFO: 2016-07-14 18:13:04 <module>(22) -- calling mymodule.myfunc()
INFO: 2016-07-14 18:15:09 myfunc(8) -- myfunc is being called
done with myfunc
を
誰でも持っている2番目のlogging.info呼び出しがスクリーンに印刷されない理由は何ですか?前もって感謝します!
ありがとうございますが、まだ動作していないようです。ロガーobjを作成する前に、ログレベルをINFOに設定しました。 so like logging.basicConfig(level = logging.INFO) logger = logging.getLogger(__ name__) 次に、setup_loggingの中で、レベルをデバッグしてchハンドラを追加します。その後、mymoduleの中で、logger.debugステートメントを追加しました。 main.pyを呼び出すと、mymoduleのデバッグメッセージは表示されません。 – box