2
私は、プロジェクトが成長するにつれて簡単にコードをデバッグできるようにしようとしています。私は印刷やデバッグの文を追加したり削除したりするのが嫌いです。なぜなら、問題は出力が読みにくくなってしまうからです。私は別のファイルとレベルでロギングを設定できるようにしようとしていますので、logging.conf設定ファイルでオンまたはオフにすることができます。代わりにPythonのlogging.confにログレベルを設定する
One: 2016-12-22 16:36:32,414 - one - DEBUG - debug on one
One: 2016-12-22 16:36:32,414 - one - INFO - info on one
One: 2016-12-22 16:36:32,415 - one - WARNING - warn on one
One: 2016-12-22 16:36:32,417 - one - ERROR - error on one
One: 2016-12-22 16:36:32,417 - one - CRITICAL - critical on one
Two: 2016-12-22 16:36:32,421 - two - CRITICAL - critical on two
私はこれを得た:私はこの出力を期待しているだろう
[loggers]
keys=root,oneLogger, twoLogger
[handlers]
keys=rootHandler, oneHandler, twoHandler
[formatters]
keys=rootFormatter,oneFormatter, twoFormatter
[logger_root]
level=DEBUG
handlers=rootHandler
[logger_oneLogger]
level=DEBUG
handlers=oneHandler
qualname=main
propagate=1
[logger_twoLogger]
level=CRITICAL
handlers=twoHandler
qualname=main
propagate=1
[handler_rootHandler]
class=StreamHandler
formatter=rootFormatter
args=(sys.stdout,)
[handler_oneHandler]
class=StreamHandler
formatter=oneFormatter
args=(sys.stdout,)
[handler_twoHandler]
class=StreamHandler
formatter=twoFormatter
args=(sys.stdout,)
[formatter_rootFormatter]
format=Root: %(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=
[formatter_oneFormatter]
format=One: %(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=
[formatter_twoFormatter]
format=Two: %(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=
:ここ
import logging.config
logging.config.fileConfig('logging.conf')
if __name__ == "__main__":
one = logging.getLogger("oneLogger")
two = logging.getLogger("twoLogger")
one.debug("debug on one")
one.info("info on one")
one.warn("warn on one")
one.error("error on one")
one.critical("critical on one")
two.debug("debug on two")
two.info("info on two")
two.warn("warn on two")
two.error("error on two")
two.critical("critical on two")
は私logging.confファイルである:ここで
は私のコードです:
Root: 2016-12-22 16:36:32,414 - one - DEBUG - debug on one
Root: 2016-12-22 16:36:32,414 - one - INFO - info on one
Root: 2016-12-22 16:36:32,415 - one - WARNING - warn on one
Root: 2016-12-22 16:36:32,417 - one - ERROR - error on one
Root: 2016-12-22 16:36:32,417 - one - CRITICAL - critical on one
Root: 2016-12-22 16:36:32,418 - two - DEBUG - debug on two
Root: 2016-12-22 16:36:32,418 - two - INFO - info on two
Root: 2016-12-22 16:36:32,420 - two - WARNING - warn on two
Root: 2016-12-22 16:36:32,421 - two - ERROR - error on two
Root: 2016-12-22 16:36:32,421 - two - CRITICAL - critical on two
私は、ロガー2がクリティカルログのみに制限され、ロガー1はすべてのログを受け入れることを期待していました。代わりに、ルートロガーがすべてのログを処理したことに驚きました。
私は何をしているのか間違っていると思いますか?
'logging.getLogger( "one.oneLogger")'と 'logging.getLogger( "2" を呼び出すの違いは何) '? – cphlewis
logging.confファイルには、警告メッセージ以上を記録する "oneHandler"(qualnameは "one")の設定と、重要なメッセージのみを記録する "twoLogger"(qualnameは "two")設定があります。 confファイル内のロガーの名前が使用されます。 "one.oneLogger"という名前のconfファイルに別のロガーを追加する場合、ロギングサブシステムは "one"の前にそれを照合し、そのレベル(およびハンドラ)を使用します。 – jordanthompson