使用其他扩展名轮换日志

时间:2018-07-13 09:21:01

标签: python python-3.x file logging rotation

根据the documentation进行日志轮换

  

当backupCount不为零时,系统将按以下方式保存旧的日志文件   将扩展名“ .1”,“。2”等附加到文件名。对于   例如,backupCount为5,基本文件名为app.log,您   将会获取app.log,app.log.1,app.log.2,直至app.log.5。

我想使用其他扩展名-而不是 log log.1 log.2 log.3 。我想轮换为 log,log.x,log.xx,log。 xxx 。我该如何实现?

1 个答案:

答案 0 :(得分:3)

查看类RotatingFileHandler,您会发现有一个方法doRollover用于对日志文件进行翻转和命名:

def doRollover(self):
    """
    Do a rollover, as described in __init__().
    """
    if self.stream:
        self.stream.close()
        self.stream = None
    if self.backupCount > 0:
        for i in range(self.backupCount - 1, 0, -1):
            # Those are the lines, which set the filenames
            sfn = self.rotation_filename("%s.%d" % (self.baseFilename, i))
            dfn = self.rotation_filename("%s.%d" % (self.baseFilename,
                                                    i + 1))
            if os.path.exists(sfn):
                if os.path.exists(dfn):
                    os.remove(dfn)
                os.rename(sfn, dfn)
        dfn = self.rotation_filename(self.baseFilename + ".1")
        if os.path.exists(dfn):
            os.remove(dfn)
        self.rotate(self.baseFilename, dfn)
    if not self.delay:
        self.stream = self._open()

您会看到,使用标准RotatingFileHandler无法实现您想要的功能,因为除了基本文件名之外,没有其他选择会对文件命名产生任何影响。

您可以创建自己的处理程序,该处理程序继承自RotatingFileHandler,并覆盖方法doRollover,以涵盖您的命名方案。