使用不同的扩展名轮换日志

Rotate logs using different extension

根据the documentation进行日志轮换

When backupCount is non-zero, the system will save old log files by appending the extensions ‘.1’, ‘.2’ etc., to the filename. For example, with a backupCount of 5 and a base file name of app.log, you would get app.log, app.log.1, app.log.2, up to app.log.5.

我想使用不同的扩展名 - 而不是 log log.1 log.2 log.3 我想旋转到 log,log.x、log.x.x、log.x.x.x。我怎样才能做到这一点?

查看 Class 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,以涵盖您的命名方案。