web-dev-qa-db-ja.com

Python logging-ログファイルの場所を確認しますか?

Pythonログステートメントが保存されている場所を知る方法は何ですか?

すなわち、私がする場合:

import logging
log = logging.getLogger(__name__)
log.info('Test')

ログファイルはどこにありますか?また、私が電話するとき:

logging.getLogger(__name__)

それは何らかの形でロガーの動作/保存方法に関連していますか?

27
zallarak

loggingモジュールは、ロガーに接続されたハンドラーを使用して、メッセージを最終的に保存または表示する方法、場所、場合によっては決定します。デフォルトでloggingを設定して、ファイルに書き込むこともできます。 docs を読む必要がありますが、logging.basicConfig(filename=log_file_name)を呼び出す場合、log_file_nameはメッセージを書き込むファイルの名前です(これは、 loggingが呼び出されます)、すべてのロガーに記録されたすべてのメッセージが(後でさらに再構成が行われない限り)そこに書き込まれます。ただし、ロガーが設定されているレベルに注意してください。メモリが提供される場合、infoはデフォルトのログレベルを下回ります。そのため、メッセージをファイルに含めるには、basicConfigの引数にもlevel=logging.INFOを含める必要があります。

質問の他の部分については、logging.getLogger(some_string)Loggerオブジェクトを返します。これは、ルートロガーから階層内の正しい位置に挿入され、名前はsome_stringの値です。引数なしで呼び出され、ルートロガーを返します。 __name__は現在のモジュールの名前を返すため、logging.getLogger(__name__)は現在のモジュールの名前に設定された名前を持つLoggerオブジェクトを返します。これはloggingで使用される一般的なパターンです。これにより、ロガー構造がコードのモジュール構造をミラーリングするため、デバッグ時にメッセージのロギングがより便利になります。

22
Silas Ray

シンプルなファイルロガーのログの場所を取得するには、試してください

logging.getLoggerClass().root.handlers[0].baseFilename
9
Taran

ログファイルの場所を見つけるには、環境内のPython Shellでlogオブジェクトをインスタンス化し、次の値を見てみてください:

log.handlers[0].stream

0
Paul Bissex

素晴らしい質問@zallarak。残念ながら、Loggersは簡単に作成できますが、検査するのは困難です。これは、Handlersのすべてのloggerのファイル名を取得します。

filenames = []
for handler in logger.handlers:
    try:
        filenames.append(handler.fh.name)
    except:
        pass

tryブロックは、ファイル名の検索が失敗したときに発生する例外を処理します。

0
Arthur