Вам необходимо установить значение backupCount
, или , чтобы изменить режим файла с добавления на усечение при открытии.
Файл журнала закрыт , нозатем снова открывается для добавления , так что вы на самом деле никогда не видите разницы.
Что происходит сейчас:
- Обработчик проверяет текущую длину файлаплюс сообщение увеличивает длину файла до максимальной.
- Если длина превышает максимальную, закройте файл
- Если
backupCount
больше нуля, поверните все существующие файлы резервной копии, а затем переименуйте файл журнала, добавив .1
- Открыть файл журнала для добавления.Если там уже есть файл с таким именем, этот файл открывается заново.
- Записать сообщение в открытый файл журнала.
Помимо установки backupCount
на число выше 0, вы также можете изменить параметр mode
на 'w'
, после чего вы обнаружите, что файл усекается каждый раз, когда он получаетслишком большой:
# 'rotate' logfile by truncating:
logFile = RotatingFileHandler(logfilename, mode='w', maxBytes=1024)
Обратите внимание, что файл все равно может стать больше maxBytes
, если длина самого нового сообщения превышает 1024 байта.
Нет возможности сохранить все повернутые файлы.Вам действительно придется использовать безумно большое число, или - использовать другую стратегию ротации файлов.Например, TimedRotatingFileHandler
вращает файлы через заданный интервал, и если вы оставите backupCount
в нуле, он никогда не удалит повернутые резервные копии.
Вы также можете создать подкласс RotatingFileHandler()
для реализации собственного переименования.стратегия, обеспечивающая ваш собственный метод doRollover()
.Вам нужно генерировать уникальные имена, если вы хотите сохранить все резервные копии;Вы можете добавить UUID, чтобы обеспечить это (вместе с датой):
import uuid
from datetime import datetime
from logging import RotatingFileHandler
class InfiniteRotatingFileHandler(RotatingFileHandler):
def doRollover(self):
if self.stream:
self.stream.close()
self.stream = None
new_name = '{}.{:%Y%m%d%H%M%S}.{}'.format(
self.baseFilename, datetime.now(), uuid.uuid4())
self.rotate(self.baseFilename, new_name)
if not self.delay:
self.stream = self._open()