4

以下のコードを使用して、ロギング モジュールを使用して、エラー メッセージとデバッグ メッセージを個別のログ ファイルに書き込みます。しかし、特定の環境変数が設定されている場合にのみログを記録する必要があります。以下のコードでは、 を設定してロギングをオフにしましたlogger.disabled=True。ただし、アプリケーションの実行が終了すると、空のログ ファイルが存在することを確認しています。ステートメントを設定した直後にこれらのファイルを削除するチェックを追加しましたlogger.disabled=Trueが、ファイルが存在しないと表示されます。これらのファイルはいつ生成されますか - ロガーが無効になっている場合でもスクリプトの実行の最後に、空のファイルの書き込みを防ぐことができますか?

class LevelFilter(logging.Filter):
    def __init__(self, level):
        self.level = level
    def filter(self, record):
        return record.levelno == self.level

logger = logging.getLogger("exceptionsLogger")
debugLogFileHandler = logging.FileHandler("Debug.log", mode='w')
errorLogFileHandler = logging.FileHandler("Error.Log", mode='w')
formatter = logging.Formatter('%(message)s')
errorLogFileHandler.setFormatter(formatter)
debugLogFileHandler.setFormatter(formatter)
logger.addHandler(debugLogFileHandler)
logger.addHandler(errorLogFileHandler)
debugLogFileHandler.addFilter(LevelFilter(logging.DEBUG))
errorLogFileHandler.addFilter(LevelFilter(logging.ERROR))

logger.setLevel(logging.DEBUG)
logger.disabled = True
4

1 に答える 1

5

logging/__init__.pyPython 標準ライブラリを参照してください。FileHandlerメソッドを持つクラスがあり__init__()ます。

FileHandler.__init__最初のメッセージが送信されるまでdelay実際の作成を遅延させるハンドラを作成する引数があります。StreamHandlerこの引数は使用せずopen()、インスタンスをインスタンス化する時点でモード "w" で呼び出されFileHandlerます。logger.disabled を True に設定する前に行います。

したがって、後でメッセージを送信しない場合でも、空のファイルを開いていることになります。

これを回避するには、True を渡す引数 delay を使用してファイル ハンドラを作成するか、インスタンス化して必要な場合にのみハンドラを割り当てます。logger.disabledファイルの作成を回避するのには役立ちません。

于 2013-10-29T10:47:49.480 に答える