GNU/Linux >> Linux の 問題 >  >> Linux

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

ログファイルの場所を見つけるには、 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

Linux
  1. MySQL/MariaDBクエリログを有効にする方法

  2. 古いログファイルをクリーンアップするコマンド?

  3. logrotate でファイルを削除する

  1. Rsyncで転送されたファイルのみをログに記録しますか?

  2. Pythonで文字列に部分文字列が含まれているかどうかを確認する

  3. Linux構成ファイルで構文エラーを確認してください

  1. /var/log ディレクトリにある 20 個の Linux ログ ファイル

  2. Linux で Apache ログ ファイルをローテーションする方法

  3. Linux/Unix の ini/config ファイルの場所は?