0

假设我使用 RotatingFileHandler 使用 python 创建了一个旋转文件记录器。我将文件数设置为 10,每个文件大小设置为 1 MB。我的问题与轮换是如何发生的有关。是否通过保持所有 10 个文件打开并确保在将一行添加到最新文件时修改每个文件的内容来进行轮换?如果是这样,那么应该至少有 10 个文件描述符始终处于打开状态。

假设每个文件有 100 KB 块行,所以每个文件只有 10 行。因此,当通过此旋转日志处理程序插入另一行(100 KB)时,每个文件的最后一行不会放在下一个文件的顶部(从新到旧)吗?所以保持所有文件描述符一直打开是有意义的,不是吗?

4

1 回答 1

1

处理程序只有一个打开的文件。旋转时重命名其他文件。

首先,关闭当前文件。然后,旋转以相反的顺序重命名文件;所以带有扩展名的文件.9被重命名为.10first,如果已经存在,则删除.10它。然后.8重命名为.9等。最后,“当前”文件被重命名以附加.1扩展名。

根据delay标志,最后会打开一个新文件,无论是在旋转时还是在要写入下一个日志条目时。

所有这些都包含在logging.handlers.RotatingFileHandler()文档中

当即将超过大小时,文件将关闭,并以静默方式打开一个新文件以进行输出。[...] 如果backupCount不为零,系统将通过在文件名中附加扩展名“.1”、“.2”等来保存旧的日志文件。例如,如果backupCount为 5,基本文件名为 app.log,您将获得app.log, app.log.1, app.log.2, up to app.log.5. 写入的文件始终是app.log. 当这个文件被填满时,它被关闭并重命名为app.log.1,如果文件app.log.1app.log.2等存在,则它们分别被重命名为app.log.2app.log.3

于 2015-01-23T14:13:53.413 回答