ログファイルの場所を見つけるには、 log
をインスタンス化してみてください 環境内の Python シェルでオブジェクトを検索し、次の値を調べます:
log.handlers[0].stream
logging
モジュールは、ロガーにアタッチされたハンドラーを使用して、メッセージが最終的に保存または表示される方法、場所、または場合でも決定します。 logging
を設定できます デフォルトでは、ファイルにも書き込みます。本当にドキュメントを読む必要がありますが、 logging.basicConfig(filename=log_file_name)
を呼び出す場合 どこで log_file_name
メッセージを書きたいファイルの名前です (logging
で他の何よりも先にこれを行う必要があることに注意してください) がまったく呼び出されない場合)、すべてのロガーに記録されたすべてのメッセージが (後でさらに再構成が行われない限り) そこに書き込まれます。ただし、ロガーがどのレベルに設定されているかに注意してください。メモリが機能する場合、info
デフォルトのログレベルを下回っているため、 level=logging.INFO
を含める必要があります basicConfig
への引数で あなたのメッセージがファイルに残るように。
あなたの質問の他の部分については、logging.getLogger(some_string)
Logger
を返します ルートロガーから階層内の正しい位置に挿入されたオブジェクト。名前は some_string
の値です .引数なしで呼び出されると、ルート ロガーが返されます。 __name__
現在のモジュールの名前を返すため、logging.getLogger(__name__)
Logger
を返します 名前が現在のモジュールの名前に設定されたオブジェクト。これは logging
で使用される一般的なパターンです これは、ロガー構造がコードのモジュール構造を反映するためです。これにより、多くの場合、デバッグ時にログ メッセージがより便利になります。
これに関するいくつかの良い答えですが、別のタイプのファイルハンドラーを使用していたため、一番上の答えはうまくいきませんでした。handler.streamはパスを提供しませんが、ファイルハンドルであり、そこからパスを取得することはやや非自明。これが私の解決策です:
import logging
from logging import FileHandler
# note, this will create a new logger if the name doesn't exist,
# which will have no handlers attached (yet)
logger = logging.getLogger('<name>')
for h in logger.handlers:
# check the handler is a file handler
# (rotating handler etc. inherit from this, so it will still work)
# stream handlers write to stderr, so their filename is not useful to us
if isinstance(h, FileHandler):
# h.stream should be an open file handle, it's name is the path
print(h.stream.name)
単純なファイル ロガーのログの場所を取得するには、
logging.getLoggerClass().root.handlers[0].baseFilename