0

RotatingFileHandler を使用して Python でローテーション ファイル ロガーを作成するとします。ファイル数を 10 に設定し、各ファイル サイズを 1 MB に設定しました。私の質問は、回転がどのように起こるかに関連しています。10個のファイルすべてを開いたままにし、最新のファイルに行が追加されたときに各ファイルの内容が変更されるようにすることで、ローテーションが行われますか? その場合、常に開いているファイル記述子が少なくとも 10 個あるはずです。

各ファイルに 100 KB のチャンク行があるとします。したがって、各ファイルには 10 行しかありません。では、このローテーション ログ ハンドラーを介して別の行 (100 KB) が挿入されると、各ファイルの最後の行が次のファイルの先頭に (新しいものから古いものへ) 配置されませんか? したがって、すべてのファイル記述子を常に開いておくのは理にかなっていますね。

4

1 に答える 1

1

ハンドラーが開いているファイルは 1 つだけです。他のファイルは回転時に名前が変更されます。

まず、現在のファイルが閉じられます。次に、ローテーションによってファイルの名前が逆順に変更されます。そのため、拡張子を持つファイルの名前が最初に.9変更され.10、既存のファイルが存在する.10場合は削除されます。次に、などに名前が.8変更.9されます。最後に、「現在の」ファイルの名前が変更され、.1拡張子が追加されます。

フラグに応じて、delayローテーション時または次のログ エントリの書き込み時に、最後に新しいファイルが開かれます。

これはすべてドキュメントに含まれていますlogging.handlers.RotatingFileHandler()

サイズを超えそうになると、ファイルが閉じられ、出力用に新しいファイルがサイレント モードで開かれます。[...] backupCountが 0 以外の場合、システムは拡張子「.1」、「.2」などをファイル名に追加して古いログ ファイルを保存します。たとえば、backupCountが 5 でベース ファイル名が app.log の場合、最大app.logで , app.log.1,が取得されます。書き込まれるファイルは常に. このファイルがいっぱいになると、閉じられて に名前が変更されます。ファイル、などが存在する場合は、それぞれ、などに名前が変更されます。app.log.2app.log.5app.logapp.log.1app.log.1app.log.2app.log.2app.log.3

于 2015-01-23T14:13:53.413 に答える