Pythonログステートメントが保存されている場所を知る方法は何ですか?
すなわち、私がする場合:
import logging
log = logging.getLogger(__name__)
log.info('Test')
ログファイルはどこにありますか?また、私が電話するとき:
logging.getLogger(__name__)
それは何らかの形でロガーの動作/保存方法に関連していますか?
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
で使用される一般的なパターンです。これにより、ロガー構造がコードのモジュール構造をミラーリングするため、デバッグ時にメッセージのロギングがより便利になります。
シンプルなファイルロガーのログの場所を取得するには、試してください
logging.getLoggerClass().root.handlers[0].baseFilename
ログファイルの場所を見つけるには、環境内のPython Shellでlog
オブジェクトをインスタンス化し、次の値を見てみてください:
log.handlers[0].stream
素晴らしい質問@zallarak。残念ながら、Loggers
は簡単に作成できますが、検査するのは困難です。これは、Handlers
のすべてのlogger
のファイル名を取得します。
filenames = []
for handler in logger.handlers:
try:
filenames.append(handler.fh.name)
except:
pass
try
ブロックは、ファイル名の検索が失敗したときに発生する例外を処理します。