2

これまで、コードに「print debugmessage」および「ifcondition:printdebugmessage」を追加してきました。しかし、多くの人がそれを行うのに最善の方法ではないと私に言いました。私は本当にロギングモジュールの使い方を学ぶ必要があります。簡単に読んだ後、それは私が望む可能性のあるすべてを実行し、次にいくつかを実行するように見えます。それ自体が学習プロジェクトのように見えます。今は他のプロジェクトに取り組み、最小限の機能を使用して支援したいと思っています。それが何か違いを生むなら、私はpython 2.6を使用しており、ライブラリとレガシーの互換性のために、近い将来になります。

現時点でやりたいのは、特定の領域をデバッグするために、セクションごとにオンとオフを切り替えることができるメッセージをコードに追加することだけです。'hello_log_world'として、これを試しましたが、期待したとおりに動作しません

import logging

# logging.basicConfig(level=logging.DEBUG)

logging.error('first error')
logging.debug('first debug')

logging.basicConfig(level=logging.DEBUG)

logging.error('second error')
logging.debug('second debug')

物事を単純にするために、できるだけ多くのデフォルトを使用して、本当に基本的な構成を使用していることに気付くでしょう。しかし、それは単純すぎるか、ロギングの背後にあるプログラミングモデルを理解していないようです。

sys.stderrが最終的には

ERROR:root:first error
ERROR:root:second error
DEBUG:root:second debug

...ただし、2つのエラーメッセージのみが表示されます。level = DEBUGを設定しても、2番目のものは表示されません。プログラムの開始時にbasicConfig呼び出しのコメントを解除すると、4つすべてが出力されます。

単純すぎるレベルで実行しようとしていますか?

期待される動作を得るために、そこに書いたものに追加できる最も簡単なことは何ですか?

4

2 に答える 2

2

ロギングは実際には特定の階層(DEBUG -> INFO -> WARNING -> ERROR -> CRITICAL)に従い、デフォルトのレベルはですWARNING。したがって、2つのエラーメッセージが表示される理由は、それがWARNING階層チェーンよりも進んでいるためです。

奇妙なコメントの振る舞いについては、説明はロギングドキュメントにあります(あなたが言うように、それは彼ら自身へのタスクです:)):

basicConfig()の呼び出しは、debug()、info()などの呼び出しの前に行う必要があります。これは1回限りの単純な構成機能として意図されているため、最初の呼び出しのみが実際に何も実行しません。後続の呼び出しは事実上何もしません。

ただし、setLevelパラメータを使用して、必要なものを取得できます。

import logging

logging.getLogger().setLevel(logging.ERROR)

logging.error('first error')
logging.debug('first debug')

logging.getLogger().setLevel(logging.DEBUG)

logging.error('second error')
logging.debug('second debug')

の引数がないgetLogger()ということは、ルートロガーが変更されていることを意味します。これは基本的に、@ delの(良い)答えの前の1つのステップであり、それぞれが固有のプロパティ/出力レベルなどを持つ複数のロガーに入り始めます。

于 2012-10-29T06:10:27.923 に答える
1

コードのログレベルを変更して出力を制御するのではなく、複数のロガーを作成し、それぞれのログレベルを個別に設定することを検討する必要があります。例えば:

import logging

first_logger = logging.getLogger('first')
second_logger = logging.getLogger('second')

logging.basicConfig()
first_logger.setLevel(logging.ERROR)
second_logger.setLevel(logging.DEBUG)

first_logger.error('first error')
first_logger.debug('first debug')

second_logger.error('second error')
second_logger.debug('second debug')

これは以下を出力します:

エラー:最初:最初のエラー
エラー:秒:秒エラー
DEBUG:second:second debug
于 2012-10-29T06:19:26.720 に答える