Поворот журналов с использованием другого расширения

Что вы можете сделать, это

class OffsetWithAttributes( object ):
    def __init__( self, offset, **kw ):
        self.offset= offset
        self.attributes= kw
    def __eq__( self, other ):
        return self.offset == other.offset
    def __lt__( self, other ):
        return self.offset < other.offset
    def __le__( self, other ):
        return self.offset <= other.offset
    def __gt__( self, other ):
        return self.offset > other.offset
    def __ge__( self, other ):
        return self.offset >= other.offset
    def __ne__( self, other ):
        return self.offset != other.offset

Это должно позволить вам создать простой list экземпляров OffsetWithAttributes. Алгоритм bisect должен быть полностью счастлив использовать определенные операторы.

Вы можете использовать свой someOWA.attributes['data'].

Или

    def __getattr__( self, key ):
        return self.attributes[key]

Это должно сделайте OffsetWithAttributes больше похожим на dict.

1
задан Slazer 13 July 2018 в 09:34
поделиться

1 ответ

Заглянув в класс 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, чтобы покрыть вашу схему именования.

3
ответ дан Igle 17 August 2018 в 13:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: