python中的RotatingFileHandler记录器打开了多少个文件描述符?

时间:2015-01-23 14:11:09

标签: python logging log-rotation

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

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

1 个答案:

答案 0 :(得分:1)

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

首先,关闭当前文件。然后,旋转以相反的顺序重命名文件;因此,扩展名为.9的文件首先会重命名为.10,如果存在则删除已存在的.10。然后.8重命名为.9,等等。最后,当前'文件已重命名,以附加.1扩展名。

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

所有这些都是included in the logging.handlers.RotatingFileHandler() documentation

  

当要超过大小时,将关闭文件并静默打开一个新文件以进行输出。 [...]如果 backupCount 非零,系统将通过将扩展名“.1”,“。2”等附加到文件名来保存旧的日志文件。例如,如果 backupCount 为5且基本文件名为app.log,则会获得app.logapp.log.1app.log.2,最多为{{ 1}}。正在写入的文件始终为app.log.5。填写此文件后,该文件将关闭并重命名为app.log,如果存在app.log.1app.log.1等文件,则会将其重命名为app.log.2,{{ 1}}等。