logging.handlers.RotatingFileHandler для ротации файлов логов при достижении заданного размера.  Основные параметры:
  filename: Путь к файлу лога.maxBytes: Максимальный размер файла в байтах.  После достижения этого размера файл будет ротирован.backupCount:  Количество резервных копий логов, которые будут храниться.  Старые файлы удаляются, когда их количество превышает это значение.encoding:  (Опционально) Укажите кодировку файла.
import logging
import logging.handlers
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
handler = logging.handlers.RotatingFileHandler(
    'app.log',
    maxBytes=1024 * 1024,  # 1MB
    backupCount=5,
    encoding='utf8'
)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
for i in range(10000):
  logger.info(f'Сообщение лога номер {i}')
  RotatingFileHandler, который ротирует файл 'app.log', когда он достигает 1MB, и хранит 5 резервных копий.
Для управления размером файлов логов с помощью logging.handlers.RotatingFileHandler, необходимо сконфигурировать его с правильными параметрами:
filename: Имя файла лога, куда будут записываться сообщения.maxBytes: Максимальный размер файла лога в байтах. Когда файл достигнет этого размера, он будет ротирован.backupCount: Количество резервных файлов логов, которые будут сохранены. Когда текущий файл достигает maxBytes, он переименовывается (ротируется) в filename.1, затем filename.2, и так далее.  Если уже есть backupCount файлов, самый старый файл будет удален.encoding (необязательно): Кодировка файла лога. Рекомендуется указывать 'utf-8'.Пример использования:
import logging
import logging.handlers
# Настройка логгера
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG) # Устанавливаем минимальный уровень логирования
# Создаем RotatingFileHandler
log_file = 'my_application.log'
max_bytes = 1024 * 1024  # 1MB
backup_count = 5
handler = logging.handlers.RotatingFileHandler(
    log_file,
    maxBytes=max_bytes,
    backupCount=backup_count,
    encoding='utf-8'
)
# Создаем форматировщик логов (Formatter)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
# Добавляем обработчик к логгеру
logger.addHandler(handler)
# Пример использования логгера
logger.debug('Сообщение отладки')
logger.info('Информационное сообщение')
logger.warning('Предупреждение')
logger.error('Ошибка')
logger.critical('Критическая ошибка')
Как это работает:
my_application.log.my_application.log достигает 1MB (maxBytes), происходит ротация.my_application.log переименовывается в my_application.log.1.my_application.log.1 уже существует, он переименовывается в my_application.log.2, и так далее.backupCount), файл my_application.log.5 будет удален, чтобы освободить место для нового файла my_application.log.4, который станет my_application.log.5.Важно:
maxBytes должен быть больше 0.backupCount должен быть больше или равен 0.  Если backupCount равен 0, старые файлы логов не сохраняются.maxBytes и backupCount зависит от потребностей вашего приложения и доступного дискового пространства.