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